求助-sql server 2005 如何实现数据加密策略
刚学习了关于数据加密的方法
可以用证书,对称密钥,非对称密钥
但是这些东西是数据库管理员建立,管理员自己当然知道密码,我想要加密的目的就是想让数据库这边使得即使是数据库管理员也没有办法看到用户的密码
应该如何实现呢?就是只有用户自己可以知道自己的密码。
我想的方法是,对称密钥本身由客户端程序调用存储过程建立,用户的密码即对称密钥的密码,然后默认在密码栏插入字符串 authorized 并用用户创建的这个对称密钥对其加密
用户在登录验证时,同样用存储过程查询用户表,用户输入的密码作为输入参数,在存储过程中,解密字段,如果密码正确的话,则解密成功,会得到字符串authorized 判断用登录成功
但是这样的话会有N多对称密钥堆积在数据库服务器,觉得好像很浪费。
下面是我的按照我的思路写的存储过程(未作调优),已经测试通过
------用户注册的存储过程create proc pro_useregister@loginname as nvarchar(10),@passwords as nvarchar(10)asdeclare @sqlStr nvarchar(2000)------创建对称密钥set @sqlStr='create symmetric key '+ @loginname+' with algorithm=des,key_source='''+ @loginname+''',identity_value='''+ @loginname+'''encryption by password='''+@passwords+''''exec sp_executesql @sqlStr------插入用户数据insert into user_info values(@loginname,'authorized')------打开密钥set @sqlStr='open symmetric key '+@loginname+' decryption by password='''+@passwords+''''exec sp_executesql @sqlStr------加密用户数据set @sqlStr='update user_info set passwords=encryptbykey(key_guid( '''+@loginname+''' ),passwords) where username='''+@loginname+''''exec sp_executesql @sqlStr------关闭密钥set @sqlStr= 'close symmetric key '+@loginnameexec sp_executesql @sqlStr------用户登录验证的存储过程create proc pro_logincheck@loginname as nvarchar(10),@passwords as nvarchar(10)asdeclare @sqlStr nvarchar(2000)------打开密钥set @sqlStr='open symmetric key '+@loginname+' decryption by password='''+@passwords+''''exec sp_executesql @sqlStr------查询用户数据select username,convert(nvarchar,decryptbykey(passwords)) as password from user_info where username=@loginname------关闭密钥set @sqlStr= 'close symmetric key '+@loginnameexec sp_executesql @sqlStr