zoukankan      html  css  js  c++  java
  • SQL Server 加密层级

    ---------------------------------------------------------------------------------------------------------------------------------------------------------

    第一层:

             服务主密钥、它在有需要的时候自动生成、比如说要加密数据库主密钥的时候。而且不可以手工create。

             然、

            我们还是可以对其进行备份与还原的。

            backup service master key to file = 'E:server_master_key.bak'
            encryption by password = '123456';  -- 没有with
            go

            -------------------------

            restore service master key from file = 'E:server_master_key.bak'
            decryption by password = '123456';  -- 没有with
            go  

    第二层:

             数据库主密钥、它要我们手工的create 、它用来加密 证书,对称密钥,非对称密钥。

             create master key encryption by password = '123456';
             go

             -----------------------------

             如前面所说的、数据库主密钥是通过服务主密钥加密的! 那为什么在create master key 中还要有

             ecryption by password 这一项呢!这是因为SQL Server 提供两种访问方式

                           1、自动型,简单的说就是SQL server 知道你要用了会去自动打开 master key,然而它也有不好的

                               的地方就是它要与权限关联。就是说如果你的账号没有适当的权限就打不开。

                           2、手动型,就是说你要手动的打开与关闭。

                           --------------------------------------

                           A、去除service master key 加密

                                alter master key drop encryption by service master key;
                                go; -- 没有with

                          ---------------------------------------

                          B、增加 service master key 加密

                               open master key decryption by password = '1234567'
                               alter master key add encryption by service master key;
                               close master key; -- 没有with
                               go

             ------------------------------

             然、数据库主密钥也支持备份与还原

             backup master key to file = 'E:master_key.bak'
             encryption by password = '123456'; -- 没有with
             go

             ---------------------------

             restore master key from file = 'E:master_key.bak'
             decryption by password = '123456'
             encryption by password = '1234567'  -- 没有with 但是一定要加encryption by password 这一项才可以正确的运行。
             go

             ---------------------------

                                              -----------总结:service master key 与 master key 的操作都不带with-----------------

    第二层:

             非对称加密部分、它用来加密数据。

             创建:

                   create asymmetric key asy_key_test
                   with
                   algorithm = rsa_512
                   encryption by password = '123456';
                   go

             删除:

                   drop asymmetric key asy_key_test;

                   go

             加密:

                   insert into T(X,Y) values(1,ENCRYPTBYASYMKEY(ASYMKEY_ID('asy_key_test'),'this is the clear text'));
                   go

             解密:

                   select X,cast(
                   DECRYPTBYASYMKEY(ASYMKEY_ID('asy_key_test'),Y,N'abcdef') as varchar)
                   from T;
                   go

            对于非对称的密钥、加密是用公钥完成的,解密是用私钥。

            也就是说如果我们把密钥的私钥部分修改,解密时会出错

                  alter asymmetric key asy_key_test
                  with
                  private key(encryption by password = 'abcdef',decryption by password = '123456');
                  go  -- 小心with 后面是小括号

          -------------------------------------------------------------------------------------------------------------------

          对称加密部分、

               创建:

                     create symmetric key sym_key_test
                     with
                          algorithm = TRIPLE_DES
                          encryption by password = '123456';

                          -- encryption by asymmetric key asy_key_name;也是可以用  
                    go

               删除:

                     drop symmetric key sym_key_test;

               使用:

                     open symmetric key sym_key_test decryption by password = '123456'

                     insert into T3(X,Y) values(1,ENCRYPTBYKEY(KEY_GUID('sym_key_test'),'this is the text!'));

                     select cast(DECRYPTBYKEY(Y) as varchar)from T3;

                     close symmetric key sym_key_test;
                     go

    ---------------  加密时还是要有key_guid 的,解密时就不用这么多了-------------------------------------- 

    证书部分:

                证书有自己的公钥与私钥,还有过期时间,支持备份还还原就是说证书的可移植性强。

                创建:

                      create certificate ctf_test
                      encryption by password = '123456'
                      with
                      subject = '证书名:ctf_test',
                      start_date = '2014-10-16',
                      expiry_date = '2015-10-16'
                      go

                备份:

                      backup certificate ctf_test
                      to file = 'E:ctf_public.bak'
                      with private key(file= 'E:ctf_private.bak',decryption by password= '123456',encryption by password= '123456');
                      go

                还原:

                      create certificate ctf_test
                      from file = 'E:ctf_public.bak'
                      with private key(file= 'E:ctf_private.bak',decryption by password= '123456',encryption by password= '123456');
                      go

               管理证书的私钥:

                                   删除、

                                         alter certificate ctf_test

                                         remove private key;

                                   增加、

                                         alter certificate ctf_test
                                         with private key

                                         (file= 'E:ctf_private.bak',decryption by password= '123456',encryption by password= '123456');
                                         go

                                   使用、

                                         create table T4(X int ,Y varbinary(max));
                                         go

                                        加密:

                                              insert into T4(X,Y) values(1,ENCRYPTBYCERT(CERT_ID('ctf_test'),'this is the text'));
                                              go

                                        解密:

                                              select * ,cast(DECRYPTBYCERT(CERT_ID('ctf_test'),Y,N'123456') as varchar) as [解密文本]
                                              from T4;
                                              go

                                        

  • 相关阅读:
    [转载]vue中全局和局部引入批量组件方法
    [转]详解在vue-test-utils中mock全局对象
    [转]imageMagick 在nodejs中报错Error: spawn identify ENOENT的解决方案
    使用 dva 如何配置异步加载路由组件
    dva.js 上手
    [转]axios的兼容性处理
    【转】链接伪类(:hover)CSS背景图片有闪动BUG
    【转】 svn: Server sent unexpected return value (403 Forbidden) in response to CHECKOUT request for-解决方法
    vue 路由相同路径跳转报错
    新手小白第一次与后端联调
  • 原文地址:https://www.cnblogs.com/JiangLe/p/4029840.html
Copyright © 2011-2022 走看看