都是基本示例,更多参考官方文档:
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