加密SQL Server中的列

时间:2012-09-14 07:44:33

标签: sql-server-2008

我的表格TblUserLogin包含LoginID intPassword varchar(50)LoginUserName varchar(150)Designation varchar(100)列。

我的要求是,每当我们对此表使用select语句时,我们都能看到输入的密码(这是敏感信息)。

是否有任何方法可以加密密码列,以便我们在使用select语句时以加密方式查看信息,并且不会影响访问密码列或插入的代码新密码?

简单来说,“密码列在使用select语句从Management Studio访问时显示为加密,但在以编程方式访问时,它会返回实际的非加密密码”。

3 个答案:

答案 0 :(得分:2)

试试这个:

CREATE Procedure [dbo].[EncryptPasswd]
@user_id int,
@username varchar(255),
@passwd varchar(255)
As
Begin
Declare @res varbinary(2000)

IF NOT EXISTS(select * from sys.symmetric_keys where name='##MS_DatabaseMasterKey##')
CREATE MASTER KEY ENCRYPTION
BY PASSWORD = 'xyz@123'


IF NOT EXISTS(select * from sys.certificates where name='EncryptTestCert')
CREATE CERTIFICATE EncryptTestCert
WITH SUBJECT = 'xyz@123'

IF NOT EXISTS(select * from sys.symmetric_keys where name='TestTableKey') 
CREATE SYMMETRIC KEY TestTableKey
WITH ALGORITHM = TRIPLE_DES ENCRYPTION
BY CERTIFICATE EncryptTestCert

OPEN SYMMETRIC KEY TestTableKey DECRYPTION
BY CERTIFICATE EncryptTestCert


INSERT INTO Users(user_id,username,passwd) 
SELECT @user_id,@username,ENCRYPTBYKEY(KEY_GUID('TestTableKey'),@passwd)
END

当您将新用户插入用户表时使用此sproc。这将加密密码并插入。

答案 1 :(得分:1)

一般情况下,除非您无法避免,否则不应将密码以明文或可逆加密方式存储在数据库中。

相反,你应该存储密码的哈希值,然后当你需要比较它时,哈希用户输入并比较哈希值。

答案 2 :(得分:0)

您可以在sql server 2008中加密密码

阅读this文章,非常清楚地描述