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);
    
                        }
                    }
    
  • 相关阅读:
    [问题2014S12] 复旦高等代数II(13级)每周一题(第十二教学周)
    [问题2014S09] 解答
    [问题2014S11] 复旦高等代数II(13级)每周一题(第十一教学周)
    [问题2014S08] 解答
    [问题2014S10] 复旦高等代数II(13级)每周一题(第十教学周)
    [问题2014S07] 解答
    [问题2014S09] 复旦高等代数II(13级)每周一题(第九教学周)
    [问题2014S08] 复旦高等代数II(13级)每周一题(第八教学周)
    怎么解决tomcat占用8080端口问题图文教程
    MySQL中删除重复数据只保留一条
  • 原文地址:https://www.cnblogs.com/JinweiChang/p/15155123.html
Copyright © 2011-2022 走看看