论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Sql Server教程
Tag:注入,存储过程,分页,安全,优化,加密,索引,日志,压缩,base64,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,触发器,socket,安装,sqlserver2000,sqlserver2005,sqlserver2008,视频教程

SQL Server中加密的介绍2

文章类别:Sql Server | 发表日期:2012-4-5 11:43:03

Sql Server教程:SQL Server中加密的介绍2


    4

    图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

    图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提供的加密技术之前,一定要先对加密的各个功能概念有一个系统的了解,否则很有可能造成的后果是打不开数据库。准备在后续文章中再写关于证 书,密钥的备份和恢复;

SQL Server中的数据列加密(Column-level Encryption)

   
 SQL Server在2005引入了列加密的功能。使得可以利用证书,对称密钥和非对称密钥对特定的列进行加密。在具体的实现上,根据加密解密的方式不同,内置了4对函数用于加密解密:
1、EncryptByCert()  和DecryptByCert()—利用证书对数据进行加密和解密
2、EncryptByAsymKey()  and DecryptByAsymKey()—利用非对称密钥对数据进行加密和解密
EncryptByKey()  and DecryptByKey()—利用对称密钥对数据进行加密和解密 3、EncryptByPassphrase()  and DecryptByPassphrase()—利用密码字段产生对称密钥对数据进行加密和解密。

    因此,加密数据列使用起来相对比较繁琐,需要程序在代码中显式的调用SQL Server内置的加密和解密函数,这需要额外的工作量,并且,加密或解密的列首先需要转换成Varbinary类型。

    在AdventureWorks示例数据库中,我们找到Sales.CreditCard表,发现信用卡号是明文显示的(怎么AdventureWorks也像泄漏密码的某IT网站这么没节操)。因此希望对这一列进行加密。
视频教程列表
文章教程搜索
 
Sql Server推荐教程
Sql Server热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058