2

、、、、のTblUserLoginLoginID 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

ユーザーテーブルに新しいユーザーを挿入するたびに、このsprocを使用します。これにより、パスワードが暗号化されて挿入されます。

于 2012-09-14T09:33:09.630 に答える
1

一般に、絶対に避けられない場合を除いて、パスワードをデータベースにクリアまたは可逆暗号化を使用して保存しないでください。

代わりに、パスワードのハッシュを保存する必要があります。それを比較する必要がある場合は、ユーザー入力をハッシュして、ハッシュを比較します。

于 2012-09-14T09:29:07.887 に答える
0

SQL Server 2008 でパスワードを暗号化できます

この記事を読んで、非常に明確に説明します

于 2012-09-14T08:06:04.820 に答える