SQL Server 2008中的代码安全(五):非对称密钥加密 Asymmetric Key

使用非对称密钥对数据进行加密和解密

由于同时需要公钥和密钥,在维护保密数据时使用非对称密钥来加密数据是非常安全的方式。

但同时用于大数据集时将消耗更多的资源。

use[aa]
--1、创建名称为asymDemokey的非对称密钥
create asymmetric key asymDemokey
with algorithm =rsa_512 --加密安全类型
encryption by password='123' --密码--2、查看当前数据库中的非对称密钥
SELECT name, algorithm_desc, pvt_key_encryption_type_desc 
FROM sys.asymmetric_keys --3、修改私钥密码
ALTER ASYMMETRIC KEY asymDemoKey--要修改的密钥名称 
WITH PRIVATE KEY --私钥 
(ENCRYPTION BY PASSWORD = '456',--指定新密码 
DECRYPTION BY PASSWORD = '123')--旧密码是用来解密的 --不推荐使用非对称密钥对数据加密,但它仍然是一个选择。一旦将非对称密钥加到数据库,就可以用来加密和解密数据。
--用到以下两个sql函数:
--
--EncryptByAsymKey 加密数据。(http://technet.microsoft.com/en-us/library/ms186950.aspx)
--
--DecryptByAsymKey解密数据。(http://msdn.microsoft.com/en-us/library/ms189507.aspx)--注意,在通过证书加密时,DecryptByAsymKey返回的是varbinary类型的加密数据。--4、创建需要加密的数据 
Create Table BankUser 
(PKID int primary key identity(1,1) 
,UserNo varbinary(1000) null  --一定要用二进制数据类型
,CurState datetime   not null 
) 
go insert into BankUser 
(UserNo,CurState) 
VALUES (EncryptByAsymKey(AsymKey_ID('asymDemoKey'),'137'),GETDATE()) 
--插入一条记录,字段UserNo存储了加密的号码值 137
--EncryptByAsymKey 加密数据
go--查看未加密的数据:  
SELECT PKID,Curstate, 
cast 
(DecryptByAsymKey(AsymKey_ID('asymDemoKey'),UserNo,N'456') 
as varchar(1000)) as UserNo --需要原始私钥 
,userno 加密
from BankUser --5、删除非对称密钥--命令:DROP ASYMMETRIC KEY 删除指定的非对称密钥( http://msdn.microsoft.com/en-us/library/ms188389.aspx)
--
--例子:
DROP ASYMMETRIC KEY asymDemoKey DROP TABLE [dbo].[BankUser]

小结:

1、本文主要介绍非对称密钥的创建、删除、查看以及用它来修改私钥、进行数据的加密和解密。

2、非对称密钥包含数据库级的内部公钥和私钥,它可以用来加密和解密SQL Server数据库中的数据。

3、非对称密钥对于数据库加密属于高安全选项,因而需要更多的SQL Server资源,不推荐使用。

文章地址:http://www.cnblogs.com/downmoon/archive/2011/03/14/1983046.html