日期:2014-05-18 浏览次数:20475 次
if object_ID('test') is not null drop function test go create function test ( @Str nvarchar(4000),--加密的字符串 @Flag bit,--1、加密 0、解密 @Key nvarchar(50)--密文 ) returns nvarchar(4000) with Encryption as begin Declare @LenStr int,@i int,@Str2 nvarchar(4000),@Split nvarchar(2),@LenKey int select @Str=@Str+'A',@LenStr=len(@Str),@i=1,@Str2='',@LenKey=Len(@Key+'A')-1 while @i<@LenStr select @Split=substring(@Str,@i,1), @Split=nchar((unicode(@Split)+case @Flag when 1 then unicode(substring(@Key+'A',@i%@LenKey+1,1))-1 when 0 then 65535-unicode(substring(@Key+'A',@i%@LenKey+1,1)) else 0 end)%65535+cast(@Flag as int)), @Str2=@Str2+@Split,@i=@i+1 return @Str2 end go ----------------------------------use----------------------- select dbo.test(N'1234567',1,'dota') select dbo.test(N' ¦??¤ª?',0,'dota')
------解决方案--------------------
http://blog.csdn.net/fredrickhu/archive/2009/09/20/4574249.aspx
转贴自teched讲师: 牛可
基本概念:
第一层 服务主密钥
备份服务主密钥
backup service master key to file='c:\smk.bak'
encryption by password='P@ssw0rd'
restore service master key from file='c:\smk.bak'
decryption by password='P@ssw0rd'
第二层 数据库主密钥
1)必须先在该数据库上创建数据库主密钥才能使用
create master key encryption by password='P@ssw0rd'
2)使用数据库主密钥
-如果数据库主密钥使用服务密钥进行保护,则在使用时会自动打开
opren master key decryption by password='P@ssw0rd'
3)查看数据库主密钥状态
sys.symmetric_keys
4)备份数据库主密钥
backup master key to file='c:\smk.bak'
encryption by password='P@ssw0rd'
restore master key from file='c:\smk.bak'
decryption by password='P@ssw0rd'
数字证书
创建自签名
create certificate cert_myCert
encryption by password='P@ssw0rd'
with subject='Self Signed Cert',
start_date='1/31/2006'
expiry_date='1/31/2008'
非对称密钥
创建新的密钥对
create asymmetric key asy_Key1
with algorithm=RSA_2048
encryption by password='P@ssw0rd'
对称密钥
创建新的密钥对
create symmetric key SymKeyMarketing3
with algorithm=AES_2048
encryption by certificate asy_Key1
使用对称密钥
使用前必须打开
open symmetric SymKeyMarketing3
decryption by certificate asy_Key1
sys.open_keys
数据列加密
-使用对称密钥加密大量的列数据
-考虑使用证书,非对称密钥保护对称密钥
防止绕过加密数据列的攻击-使用验证器
注:
在加密列上的索引将变得无效
加密数据列的长度增长,建议使用varbinary(max)数据类型
修改已有的dml语句以支持加密的数据列
-----***********示例1 了解数据库加密体系结构*****-----
--************(1) 服务主密钥
--准备工作
--创建测试数据库TestDB
--1)备份服务主密钥
backup service master key to file='g:\smk.bak'
encryption by password='p@ssw0rd'
--2)生成新的主密钥
Alter service master key regenerate
--3)从备份文件还原服务主密钥
Restore service master key from file= file='g:\smk.bak'
encryption by password='p@ssw0rd'
--*************(2) 数据库主密钥
--1)为数据库创建数据库主密钥
create mas