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

第一层:

服务主密钥、它在有需要的时候自动生成、比如说要加密数据库主密钥的时候。而且不可以手工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

SQL Server 加密层级的更多相关文章

  1. 查看SQL SERVER 加密存储过程,函数,触发器,视图

    原文:查看SQL SERVER 加密存储过程,函数,触发器,视图 create  PROCEDURE sp_decrypt(@objectname varchar(50))ASbeginset noc ...

  2. SQL Server 加密案例解析

    一.概述 加密是一种安全措施,有时候甚至是法律要求.作为攻破Windows系统的最后一道防线,通过加密可以保证在没有密钥的情况下获取备份或者物理介质变得毫无意义. 二.概念 加密层次结构 加密层次结构 ...

  3. SQL Server加密存储过程的破解

    建好sp后,在“连接到数据库引擎”对话框的“服务器名称”框中,键入 ADMIN:,并在其后继续键入服务器实例的名称.例如,若要连接到名为 ACCT\PAYABLE 的服务器实例,请键入 ADMIN:A ...

  4. [转]细说SQL Server中的加密

    简介 加密是指通过使用密钥或密码对数据进行模糊处理的过程.在SQL Server中,加密并不能替代其他的安全设置,比如防止未被授权的人访问数据库或是数据库实例所在的Windows系统,甚至是数据库所在 ...

  5. 细说SQL Server中的加密【转】

    简介 加密是指通过使用密钥或密码对数据进行模糊处理的过程.在SQL Server中,加密并不能替代其他的安全设置,比如防止未被授权的人访问数据库或是数据库实例所在的Windows系统,甚至是数据库所在 ...

  6. 细说SQL Server中的加密

    简介 加密是指通过使用密钥或密码对数据进行模糊处理的过程.在SQL Server中,加密并不能替代其他的安全设置,比如防止未被授权的人访问数据库或是数据库实例所在的Windows系统,甚至是数据库所在 ...

  7. (4.23)SQL Server中的加密

    转自:https://www.cnblogs.com/CareySon/archive/2012/04/01/SQL-SERVER-Encryption.html 简介 加密是指通过使用密钥或密码对数 ...

  8. (4.22)Microsoft 管理控制台启用 SSL 加密的 SQL Server 实例

    如何通过使用 Microsoft 管理控制台启用 SSL 加密的 SQL Server 实例 关键词:MSSQL加密,sql server加密,sql server客户端与服务器传输内容加密 转自:h ...

  9. SQL Server 数据加密功能解析

    SQL Server 数据加密功能解析 转载自: 腾云阁 https://www.qcloud.com/community/article/194 数据加密是数据库被破解.物理介质被盗.备份被窃取的最 ...

随机推荐

  1. 关于android socket出现at java.net.DatagramSocket java.net.BindException at libcore.io.IoBridge.bind(IoBridge.java:89)等waring

    经查,是socket地址重复使用的原因,将代码做如下改变即可. ctlClient = new DatagramSocket(TRANSCTLPORT); ctlClient = new Datagr ...

  2. CodeForces 214B Hometask

    本题求n个数组成的大数,要求是2,3,5的倍数. 因为是2 和5 的倍数,所以个位为 0:所以若n个数中没有0,直接输出-1: 难点就是要求为3 的倍数. 因为若某个数为3的倍数,则其各位数的和必然是 ...

  3. Child Process

    Child Process child_process 这个模块可以生成一个子进程.nodejs提供了好几个API,本质上都是调用child_process.spawn(): const spawn ...

  4. 构建混合云:配置Azure site to site VPN连接(3)

    9. 那么我们来创建网关,创建网关的时候需要注意,看看你的设备是否支持动态网关,在本示例中的Cisco ASA 5550不支持动态网关,所以我们只能创建静态网关: 该创建会花费一定的时间,稍等即可. ...

  5. C语言的本质(19)——预处理之一:宏定义

    我们在写代码时已多次使用过以"#"号开头的预处理命令.如包含命令#include,宏定义命令#define等.在源程序中这些命令都放在函数之外,而且一般都放在源文件的前面,它们称为 ...

  6. Java的Git管理工具Gitblit

    From:http://www.oschina.net/p/gitblit Gitblit 是一个纯 Java 库用来管理.查看和处理 Git 资料库.相当于 Git 的 Java 管理工具. 下载地 ...

  7. IVM import vector machine

    本文为<Kernel Logistic Regression and the Import Vector Machine>的阅读笔记是技法课的课外阅读 Abstract:基于KLR ker ...

  8. 杭电oj 2037 今年暑假不AC

    Tips:贪心算法的典型应用,可以按照节目结束时间由小到大排序,(至于结束时间相同的,有些人说按开始时间早的排序,不过个人认为不必处理,因为结束时间一样,两个之中要么都没有,要么必有一个)然后再依次进 ...

  9. Hadoop 3、Hadoop 分布式存储系统 HDFS

    HDFS是Hadoop Distribute File System 的简称,也就是Hadoop的一个分布式文件系统. 一.HDFS的优缺点 1.HDFS优点: a.高容错性 .数据保存多个副本 .数 ...

  10. 查询本天气预报Web Services支持的国内外城市或地区信息

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://zhangkui.blog.51cto.com/1796259/497324 本文 ...