zoukankan      html  css  js  c++  java
  • SQLSERVER-Aways Encrption

    Aways Encrption

    数据库的用户可以自己创建一个证书,此证书会生成在用户主机里,只有导入了此证书的主机才能加密解密加密数据,

    包括在DB服务器上DBA没有证书也不能加解密,

    加密过程:应用(c#应用或SSMS)先加密然后才发到数据库,解密应该也是到了应用才解密。

    加密列有很多限制,不能条件查询,不能对加密列合并等等,

    配置Aways Encrption

    1.创建column master keys。

    DB→Security→Aways Encrypted keys→column Master keys→右键new column Master keys

    输入key的名称,然后点击Generate Certificate,生成证书,然后点击OK。

    2.DB→Security→Aways Encrypted keys→column encrption keys→右键 newcolumn encrption keys

    输入Name,选择刚才创建的Master key,点击Ok.

    3.列加密

    选中表,右键 Encrpt Colums

    选中要加密的列,选择加密类型,加密密钥,

    (加密类型选择为plaintext就是解密。)

    然后Next一路下去。

    经我测试,如果是空表那么不会报错,如果有数据有可能会报错。

    证书

    需要读写加密数据的主机,需要导入刚才生成的证书。

    1.导出证书。

    控制面板→Internet Options →Certificates→选中刚才的证书然后Export

    导出要设定密钥,

    2.到相应的主机上相同步骤,导入即可。

    使用SSMS操作加密列

    SSMS配置

    1.证书导入SSMS的主机上。

    2.SSMS登录实例时

    options<< 选中Always Encrpted下的Enable Aways Encrpted

    登录

    3.Tools→options 开启Enable Parameterization for Aways Encrpted

    读写加密数据

    插入数据

    插入数据只能用此语法

    DECLARE @name VARCHAR(50)='jinweichang';
    INSERT INTO Test VALUES(11,@name)
    GO
    

    查询数据

    SELECT * FROM Test
    

    使用C#操作加密列

    1.链接串中要加“Column Encryption Setting=enabled”

    2.插入数据。

      string connectionString = "Data Source=xxx; Initial Catalog=test; Integrated Security=false; Column Encryption Setting=enabled;User ID=sa;password=mima";
                    using (SqlConnection connection = new SqlConnection(connectionString))
                    {
                        connection.Open();
                        using (SqlCommand cmd = connection.CreateCommand())
                        {
                            cmd.CommandText = @"INSERT INTO Test VALUES(11,@name)";
    
                            SqlParameter paramFirstName = cmd.CreateParameter();
                            paramFirstName.ParameterName = @"@name";
                            paramFirstName.DbType = DbType.AnsiString;
                            paramFirstName.Value = "ccccc";
                            cmd.Parameters.Add(paramFirstName);
    
                            cmd.ExecuteNonQuery();
                        }
                    }
    

    3.读取数据

      string connectionString = "Data Source=xxx; Initial Catalog=test; Integrated Security=false; Column Encryption Setting=enabled;User ID=sa;password=mima";
                    using (SqlConnection connection = new SqlConnection(connectionString))
                    {
                         connection.Open();
                        using (SqlCommand cmd = connection.CreateCommand())
                        {
                            
                            cmd.CommandText = @"SELECT * FROM TEST";
    
                            SqlDataReader reader = cmd.ExecuteReader();
    
                           var dt= SQLHelper.ConvertDataReaderToDataTable(reader);
    
                        }
                    }
    
  • 相关阅读:
    微信 token ticket jsapi_ticket access_token 获取 getAccessToken get_jsapi_ticket方法
    PHP 日志 记录 函数 支持 数组 对象 新浪 sae 环境 去掉 空格 换行 格式化 输出 数组转字符串
    原生 原始 PHP连接MySQL 代码 参考mysqli pdo
    PHP 数字金额转换成中文大写金额的函数 数字转中文
    使用PHPMailer发送带附件并支持HTML内容的邮件
    设置输出编码格式 header 重定向 执行时间 set_time_limit 错误 报告 级别 error_reporting
    html5 bootstrap pannel table 协议 公告 声明 文书 模板
    指向指针的指针
    二级指针
    c语言:当指针成为参数后
  • 原文地址:https://www.cnblogs.com/JinweiChang/p/15155123.html
Copyright © 2011-2022 走看看