2012-09-14 2 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

У вас не может быть и того, и другого - вы все время зашифровываете пароль заново, или получаете его обратно в виде обычного текста (дешифрованного) все время - вы не можете его вернуть после зашифрования, как только clear-text. Самый простой способ - просто зашифровать его в своем приложении, используя хороший шифр, а затем сохранить его в 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 

Используйте этот sproc whenver вставки нового пользователя в ваш пользователь table.So это будет шифровать пароль и вставить.

0

можно зашифровать пароль в SQL Server 2008

читать this статья описывает очень четко

+0

Да, но вы либо забыли пароль в зашифрованном виде (как тарабарщину) все время, либо вы возвращаете его в виде обычного текста (дешифрованного) все время - вы не можете его вернуть после зашифрования, как только clear-text –

0

В общем, если вы абсолютно не можете избежать этого, не следует хранить пароли в базе данных либо в четкое или использование обратимого шифрования.

Вместо этого вы должны сохранить хэш пароля, а затем, когда вам нужно сравнить его, введите данные пользователя и сравните хэши.

Смежные вопросы