2012-09-14 37 views
2

我有一個表TblUserLogin,列LoginID int,Password varchar(50),LoginUserName varchar(150),Designation varchar(100)加密SQL Server中的一列

我的要求是,只要我們在此表中使用select聲明,我們就可以看到輸入的密碼(這是敏感信息)。

有什麼辦法讓我們可以加密密碼列,這樣當我們使用select聲明時,信息將以加密方式顯示,並且不會影響訪問密碼列或插入新密碼的代碼嗎?

簡而言之,當「從Management Studio使用select語句訪問密碼列時顯示爲已加密,但以編程方式訪問時,它會返回實際未加密的密碼」。

+0

1)您可以使用視圖和盛大的權利權限。 2)哈希密碼最好是用來引用它。 – danihp

+0

您不能同時擁有兩個密碼 - 您可以始終將密碼恢復爲加密,也可以始終以明文形式(解密)將其恢復 - 一旦加密後即可以一次輸入明文即可。最簡單的方法是使用一個好的密碼在你的應用程序中加密它,然後將它存儲到SQL Server中。然後,SQL Server將始終顯示加密版本,而您的應用程序可以檢查用戶輸入的加密版本的密碼。 –

回答

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 = '[email protected]' 


IF NOT EXISTS(select * from sys.certificates where name='EncryptTestCert') 
CREATE CERTIFICATE EncryptTestCert 
WITH SUBJECT = '[email protected]' 

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 

使用此存儲過程whenver你添加一個新用戶到你的用戶table.So這將加密密碼,並插入。

0

你可以加密在SQL Server密碼2008

閱讀this文章,介紹的很清楚

+0

是的,但是您要麼始終將密碼加密(如亂碼),要麼始終以明文形式(解密)回傳密碼 - 一旦加密後就不能一次性返回密碼 –

0

在一般情況下,除非你絕對無法避免這一點,你不應該在密碼或者存儲在數據庫中清除或使用可逆加密。

相反,您應該存儲密碼的散列,然後當您需要比較它時,散列用戶輸入並比較散列。