您的位置:首页 > 数据库

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

2017-09-18 10:56 796 查看
使用非对称密钥对数据进行加密和解密

由于同时需要公钥和密钥,在维护保密数据时使用非对称密钥来加密数据是非常安全的方式。
但同时用于大数据集时将消耗更多的资源。

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: