大家现在都知道数据在传输的过程中很容易会被别人得到,如果我们的数据是明文传输的,那么你就非常不幸了,数据就会被别人一览无遗,那怎么做到数据在传输的时候是密文呢?
下面俺来介绍一下进行数据在传输中的加密
都知道在传输过程中的加密方式有对称加密、非对称加密、证书加密,如过在大量的数据传输时用证书或非对称加密时非常耗资源的,用对称加密又不是很安全那怎么办呢?
在加密的时候有加密的体系进行保护的,加密体系是:1、windows级别
2、SQL服务器级别(服务器主密钥)
3、SQL数据库级别(数据库主密钥)
比如:windows级别保护SQL服务器级别而SQL服务器级别保护数据库级别,数据库级别会保护对称加密、非对称加密、证书加密,我们还可以让证书保护非对称加密再保护对称加密。这样是不是很安全啊!!!
服务器主密钥是不能手动删除或创建的,默认情况下服务器主密钥直接保护数据库主密钥,不用设置。如果服务器主密钥被破坏了我们怎么办呢?我们可以对服务器主密钥进行加密,破坏了可以直接还原。
我们来抓包看一下,插入一条记录,利用抓包器看能不能把我们的信息抓到。
clip_p_w_picpath002
是可以抓到的,因为是明文传输的。
clip_p_w_picpath004
我们在服务器上安装一下证书,然后设置一下在如图:
79
然后如图设置,右击属性
80
把否改为是,选上我们申请的证书就OK了
  60
利用证书加密后,在传输数据的时候就不再是明文了,这样就不会怕数据丢失了,就算得到了他没有我们的证书一样不能打开我们的数据。
在上面说了服务器主密钥是不能手动删除或创建的,但是我们是可以备份和还原的,下面来看关于服务器主密钥的一下特点介绍。
我们先来看看服务器主密钥的备份与还原,与以前备份大致差不多。
备份
backup service master key to file='c:\bak\smk.key' encryption by password='Ccjsj1200'(备份到C盘并在还原时需要的口令)
restore service master key from file='c:\bak\smk.key' decryption by password='Ccjsj1200'(用口令进行还原)在还原的时候因为我们的服务器主密钥没有损坏所以提示:(新旧主密钥完全相同。不需要重新加密数据)。如图:
clip_p_w_picpath006
下面我们看数据库主密钥,它是需要我们手动创建的默认是受服务器主密钥保护,如果采用默认在数据库主密钥下创建对称与非对称密钥是不用手动开启的,如果把默认的保护给删除创建对称与非对称密钥时数据库主密钥是需要我们手动开启的(在创建数据库主密钥的时候才用的是128位的3DES密钥)。
create master key encryption by password='Ccjsj1200'(创建数据库主密钥)
显示当前数据库密钥的信息:
select * from sys.databases
select * from sys.symmetric_keys
clip_p_w_picpath008
clip_p_w_picpath010
备份数据库主密钥
backup master key to file='c:\bak\msk.key' encryption by password='Ccjsj1200'(备份并设置还原口令)
我们来删除数据库主密钥并查看是否还存在如图:
clip_p_w_picpath011
还原数据库主密钥并查看信息
restore master key from file='c:\bak\msk.key' decryption by password='Ccjsj1200' encryption by password='Ccjsj1200相当于创建这个数据库主密钥时的口令)'
clip_p_w_picpath013
还原是没有问题的,前面也已经说了它默认是受到服务器主密钥保护的,那怎么还删除服务器主密钥对它的保护呢?
例:1、在删除服务器主密钥对数据库主密钥保护之前我们来创建一个非对称密钥看是否需要我们再启动数据库主密钥?
2、删除后再创建一个非对称密钥看有什么反应?
是不是跟我们前面说的一样呢?好我们还没有删除,创建一个非对称密钥实验一下。Go
create asymmetric key asy1(名称) with algorithm=RSA_2048(加密方式),不删除我们可以直接创建非对称密钥,看一下删除是什么样子呢?
clip_p_w_picpath015
alter master key drop encryption by service master key(删除服务器主密钥对数据库主密钥的保护)
还原服务器主密钥对数据库主密钥的保护的命令是:
alter master key add encryption by service master key
clip_p_w_picpath017
删除以后报错了,需要我们创建一个主密钥或打开主密钥,
clip_p_w_picpath019
open master key decryption by password='Ccjsj1200'(打开数据库主密钥)
再来创建一下试试
create asymmetric key asy2 with algorithm=RSA_2048是可以的,与我们之前说的一样,在这里说的怎样删除服务器主密钥对数据库主密钥的保护,还有怎么启动数据库主密钥与创建非对称密钥。那怎么删除数据库主密钥呢?这个简单跟以前一样就是
drop master key这样就OK了。
clip_p_w_picpath021
再来看看证书的的有关信息
正常创建证书
create certificate cer1 with subject='test(描述)',start_date='06-15-2009',expiry_date='06-15-2010'
clip_p_w_picpath023
创建证书并用口令对其保护:create certificate cer2 encryption by password='Ccjsj1200' with subject='test',start_date='06-15-2009',expiry_date='06-15-2010'
clip_p_w_picpath025
我们创建的两个证书已经存在了。
clip_p_w_picpath027
查看证书信息
select * from sys.certificates
clip_p_w_picpath029
修改私钥的口令,
alter certificate cer2 with private key (decryption by password='Ccjsj1200'(旧口令),encryption by password='Ccjsj1200'(新口令))
clip_p_w_picpath031
备份证书,我们备份时备份它的私钥与证书
backup certificate cer2 to file='c:\bak\mycer.cer' with private key (file='c:\bak\mypri',decryption by password='Ccjsj1200',encryption by password='Ccjsj1200')
clip_p_w_picpath033
我们先来查看一下,然后删除第二个证书,然后再查看一下,第二个证书就没有了
clip_p_w_picpath035
接下来开始还原证书
create certificate cer2 from file='c:\bak\mycer.cer' with private key (file='c:\bak\mypri',decryption by password='Ccjsj1200'(还原时的口令),encryption by password='Ccjsj1200'(新建的口令))
还原成功后我们再来查看一下证书
clip_p_w_picpath037
好了证书还原成功了。等着一切都做好以后我们就不会再害怕数据被别人在传输的时候丢失了。
在传输的时候没有了后顾之忧,那在数据存储的时候怎么办呢?下一篇博文我们会介绍。请大家光顾哦。O(∩_∩)O~