2

我有一张桌子TblUserLogin,里面有LoginID int, Password varchar(50), LoginUserName varchar(150), Designation varchar(100).

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

有什么方法可以加密密码列,这样当我们使用select语句时,信息将以加密的方式显示,并且不会影响访问密码列或插入新密码的代码?

简而言之,当“使用select语句从 Management Studio 访问时密码列显示为加密,但以编程方式访问时,它返回实际的未加密密码”。

4

3 回答 3

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

每当您将新用户插入用户表时使用此存储过程。因此这将加密密码并插入。

于 2012-09-14T09:33:09.630 回答
1

一般来说,除非您绝对无法避免,否则您不应将密码以明文或使用可逆加密的方式存储在数据库中。

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

于 2012-09-14T09:29:07.887 回答
0

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

看了这篇文章,描述的很清楚

于 2012-09-14T08:06:04.820 回答