设为首页 加入收藏

TOP

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

都是基本示例,更多参考官方文档:

1. Transact-SQL 函数
2. 数据库密钥
3. 证书
4. 非对称密钥
5. 对称密钥

--	drop table EnryptTest
create table EnryptTest
(
	id int not null primary key,
	EnryptData nvarchar(20),
)

insert into EnryptTest
values(1,N'888888'),(2,N'888888'),(3,N'123456'),(4,N'A');


select * from EnryptTest;

【Transact-SQL 函数加密】

/***********************************【Transact-SQL 函数加密】********************************/
--	使用 TRIPLE DES 算法(128 密钥位长度)的通行短语加密数据。


--	添加测试列
alter table EnryptTest add PassPhrase varbinary(256)
alter table EnryptTest add PassPhrase2 varbinary(256)--用于验证器验证


--	加密(EncryptByPassPhrase)
--	https://technet.microsoft.com/zh-cn/library/ms190357%28v=sql.105%29.aspx?f=255&MSPPError=-2147217396
update EnryptTest set PassPhrase = EncryptByPassPhrase('Hello.kk',EnryptData)
go

update EnryptTest 
set PassPhrase2 = EncryptByPassPhrase
	(
	  'Hello.kk'			--用于生成对称密钥的通行短语
	, EnryptData			--要加密的明文
	, 1						--指示是否将验证器与明文一起加密。如果将添加验证器,则为 1
	, convert(varbinary,id)	--用于派生验证器的数据(如 主键)
	)
go

--	解密(DecryptByPassPhrase)
--	https://technet.microsoft.com/zh-cn/library/ms188910%28v=sql.105%29.aspx?f=255&MSPPError=-2147217396

select convert(nvarchar,DecryptByPassphrase('Hello.kk',PassPhrase)) from EnryptTest;
go

select convert(nvarchar,DecryptByPassphrase(
	  'Hello.kk'	--生成解密密钥的通行短语
	, PassPhrase2	--要解密的加密文本varbinary 
	, 1				--添加验证器
	, convert(varbinary,id)))--验证器为主键
from EnryptTest;
go


--附:未用验证器的,数据并不安全
--如:把所有id的密码都改为与A一样,其他密码的解密与A一样,别人就有可能登录其他账号
update EnryptTest set PassPhrase = (select PassPhrase from EnryptTest where id=4)
go
select id,EnryptData,convert(nvarchar,DecryptByPassphrase('Hello.kk',PassPhrase)) 
from EnryptTest;


--	删除测试列
alter table EnryptTest drop column PassPhrase 
alter table EnryptTest drop column PassPhrase2
go

数据库主密钥】

/***************************************【数据库主密钥】***********************************/

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

--	创建数据库主密钥
--	https://technet.microsoft.com/zh-cn/library/ms174382(v=sql.105).aspx
create master key encryption by password = N'Hello@MyMasterKey' --必须符合Windows密码策略要求
go

--	打开当前数据库的数据库主密钥
--	https://technet.microsoft.com/zh-cn/library/ms186336(v=sql.105).aspx
open master key decryption by password = N'Hello@MyMasterKey'
go

--	更改数据库主密钥的属性
--	https://technet.microsoft.com/zh-cn/library/ms186937(v=sql.105).aspx
alter master key regenerate with encryption by password = N'Hello@MyMasterKey'

alter master key add encryption by password = N'Hello@kk'
alter master key drop encryption by password = N'Hello@kk'

alter master key add encryption by service master key
alter master key drop encryption by service master key

--	导出数据库主密钥
--	https://technet.microsoft.com/zh-cn/library/ms174387(v=sql.105).aspx
backup master key 
to file = N'D:\XXDB_MasterKey' 
encryption by password = N'Hello@MyMasterKey'
go

--	从备份文件中导入数据库主密钥
--	https://technet.microsoft.com/zh-cn/library/ms186336(v=sql.105).aspx
restore master key 
	from file = N'D:\XXDB_MasterKey'
    decryption by password = N'Hello@MyMasterKey'
    encryption by password = N'Hello@MyMasterKey' --New Password
go

--	从当前数据库中删除主密钥
--	https://technet.microsoft.com/zh-cn/library/ms180071(v=sql.105).aspx
drop maste
首页 上一页 1 2 3 4 5 下一页 尾页 1/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)