设为首页 加入收藏

TOP

SQLServer数据加密解密:常用的加密解密(一)(二)
2015-07-24 10:25:27 来源: 作者: 【 】 浏览:1
Tags:SQLServer 数据 加密解密 常用
r key go

【证书】

/*****************************************【证书】*************************************/
--	证书和非对称密钥使用数据库级的内部公钥加密数据,并且使用数据库级内部私钥解密数据
--	当使用数据库主密钥对私钥进行加密时,不需要 ENCRYPTION BY PASSWORD 选项。私钥使用数据库主密钥进行加密
--(有点难理解,最后给出例子)

select * from sys.key_encryptions
select * from sys.crypt_properties
select * from sys.certificates

select * from EnryptTest

--	添加测试列
alter table EnryptTest add CertificateCol varbinary(max)
go

--	创建证书
--	https://technet.microsoft.com/zh-cn/library/ms187798%28v=sql.105%29.aspx?f=255&MSPPError=-2147217396
create certificate Mycertificate
encryption by password = N'Hello@Mycertificate'	--加密密码
with subject = N'EnryptData certificate',		--证书描述  
start_date = N'20150401',	--证书生效日 
expiry_date = N'20160401';	--证书到期日  
go

--	使用证书的公钥加密数据
--	https://msdn.microsoft.com/zh-cn/library/ms188061(v=sql.105).aspx
update EnryptTest 
set CertificateCol = EncryptByCert(CERT_ID('Mycertificate'),CONVERT(VARCHAR(MAX),EnryptData))
go

--	用证书的私钥解密数据
--	https://msdn.microsoft.com/zh-cn/library/ms178601(v=sql.105).aspx
select *,CONVERT(VARCHAR(MAX ),DECRYPTBYCERT(CERT_ID('Mycertificate'),CertificateCol,N'Hello@Mycertificate'))
from EnryptTest;
go

--	修改私钥密码 
--	https://msdn.microsoft.com/zh-cn/library/ms189511(v=sql.105).aspx
alter certificate mycertificate 
with private key (
	decryption by password = N'Hello@Mycertificate', 
	encryption by password = N'Hello@Mycertificate')
go

--	从证书中删除私钥 
alter certificate mycertificate remove private key
go

--	备份证书
--	https://msdn.microsoft.com/zh-cn/library/ms178578(v=sql.105).aspx
backup certificate mycertificate 
to file = N'D:\mycertificate.cer' --用于加密的证书备份路径
with private key ( 
	file = N'D:\mycertificate_saleskey.pvk' , --用于解密证书私钥文件路径 
	decryption by password = N'Hello@Mycertificate' ,--对私钥进行解密的密码
	encryption by password = N'Hello@Mycertificate' );--对私钥进行加密的密码
go

--	创建/还原证书
create certificate mycertificate 
from file = N'D:\mycertificate.cer' 
with private key (
    file = N'D:\mycertificate_saleskey.pvk', 
    decryption by password = 'Hello@Mycertificate');
go

--	删除对称密钥
--	https://msdn.microsoft.com/zh-cn/library/ms182698(v=sql.105).aspx
drop certificate  Mycertificate;
go

--	删除测试列
alter table EnryptTest drop column CertificateCol;
go

【非对称密钥】

/***************************************【非对称密钥】*************************************/
--	默认情况下,私钥受数据库主密钥保护

select * from sys.key_encryptions
select * from sys.crypt_properties
select * from sys.certificates
select * from sys.asymmetric_keys
select * from sys.openkeys

select * from EnryptTest

--	添加测试列
alter table EnryptTest add AsymmetricCol varbinary(max)
go

--	创建非对称密钥
--	https://msdn.microsoft.com/zh-cn/library/ms174430(v=sql.105).aspx
create asymmetric key MyAsymmetric 
with 
	algorithm=rsa_512 
	encryption by password='Hello@MyAsymmetric';
go  

--	加密(EncryptByAsymKey)
--	https://msdn.microsoft.com/ZH-CN/library/ms186950(v=sql.105).aspx
update EnryptTest 
set AsymmetricCol = EncryptByAsymKey(asymkey_id ('MyAsymmetric'),convert(varchar(max ),EnryptData))  
go

--	解密(DecryptByAsymKey)
--	https://msdn.microsoft.com/ZH-CN/library/ms189507(v=sql.105).aspx
select *,convert(varchar(max),DecryptByAsymKey(asymkey_id('MyAs
首页 上一页 1 2 3 4 5 下一页 尾页 2/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇PL/SQL编程(一) 下一篇sqlserver2008密钥,sqlserver2008..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·微服务 Spring Boot (2025-12-26 18:20:10)
·如何调整 Redis 内存 (2025-12-26 18:20:07)
·MySQL 数据类型:从 (2025-12-26 18:20:03)
·Linux Shell脚本教程 (2025-12-26 17:51:10)
·Qt教程,Qt5编程入门 (2025-12-26 17:51:07)