Sql Server教程:SQL Server中加密的介绍2
图5.和国内某知名IT网站一样没节操的明文保存重要信息
首先我们需要将CardNumber列转为Varbinary类型。这里通过Select Into新建个表,如代码4所示。
SELECT CreditCardID, CardType, CardNumber_encrypt = CONVERT(varbinary(500),
CardNumber), ExpMonth, ExpYear, ModifiedDate INTO Sales.CreditCard_Encrypt
FROM Sales.CreditCard WHERE 1<>1
代码4.通过Select Into创建新表
此时我们利用之前创建的由证书加密的对称密钥来进行列加密,如代码5所示。
--打开之前创建的由证书加密的对称密钥 OPEN SYMMETRIC KEY SymmetricByCert DECRYPTION BY CERTIFICATE CertTest
--利用这个密钥加密数据并插入新建的表 insert Sales.CreditCard_encrypt ( CardType, CardNumber_encrypt, ExpMonth, ExpYear, ModifiedDate )
select top 10 CardType, CardNumber_encrypt = EncryptByKey(KEY_GUID('SymmetricByCert'), CardNumber), ExpMonth, ExpYear,
ModifiedDate from Sales.CreditCard
代码5.利用证书加密过的对称密钥加密数据
此时可以通过对应的解密函数查看数据,如代码6所示。
OPEN SYMMETRIC KEY SymmetricByCert DECRYPTION BY CERTIFICATE CertTest select CardType,
CardNumber = convert(nvarchar(25), DecryptByKey(CardNumber_encrypt)), ExpMonth, ExpYear,
ModifiedDate from Sales.CreditCard_encrypt
图6.由对应的解密函数查看加密的数据
所得到的结果如图7所示。
图7.解密后结果可以正确显示
利用非对称密钥和证书进行加密解密只是函数不同,这里就不测试了。
透明数据加密(Transparent Data Encryption)
在SQL Server 2008中引入了透明数据加密(以下简称TDE),之所以叫透明数据加密,是因为这种加密在使用数据库的程序或用户看来,就好像没有加密一样。TDE加密 是数据库级别的。数据的加密和解密是以页为单位,由数据引擎执行的。在写入时进行加密,在读出时进行解密。客户端程序完全不用做任何操作。
TDE的主要作用是防止数据库备份或数据文件被偷了以后,偷数据库备份或文件的人在没有数据加密密钥的情况下是无法恢复或附加数据库的。
TDE使用数据加密密钥(DEK)进行加密。DEK是存在Master数据库中由服务主密钥保护。 开启TDE的数据库的日志和备份都会被自动加密。
因为TDE使得数据库在写入时加密,在读出时解密,因此需要额外的CPU资源,根据微软的说法,需要额外3%-5%的CPU资源。
下面我们来看如何开启TDE
开启TDE非常简单,只需创建数据加密密钥(DEK)后,将加密选项开启就行,如代码6所示。
--基于我们之前创建的证书CertTest,创建DEK
--CertTest需要在Master数据库中 USE AdventureWorks GO CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER CERTIFICATE CertTest GO
--开启TDE ALTER DATABASE AdventureWorks SET ENCRYPTION ON
代码6.创建DEK后,开启TDE
这里值得注意的是,DEK是存在所开启TDE的数据库中的。当然,这个操作我们也可以通过在SSMS中右键点击需要开始TDE的数据库,选择任务--管理数据库加密来进行。
总结
本文介绍了加密的基本概念,SQL Server中加密的层级,以及SQL Server中提供的两种不同的加密方式。SQL Server的TDE是一个非常强大的功能,在用户程序中不做任何改变就能达到数据库层面的安全。在使用SQL Server提供的加密技术之前,一定要先对加密的各个功能概念有一个系统的了解,否则很有可能造成的后果是打不开数据库。准备在后续文章中再写关于证 书,密钥的备份和恢复;
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |