我有一个表TblUserLogin
,其中包含列LoginID int
、Password varchar(50)
、LoginUserName varchar(150)
code>, 指定 varchar(100)
.
我的要求是,每当我们对此表使用 select
语句时,我们都能够看到输入的密码(这是敏感信息)。
有什么方法可以加密密码列,以便当我们使用 select
语句时,信息将以加密方式显示,并且不会影响访问密码的代码列或插入新密码?
简单地说,“当使用 select
语句从 Management Studio 访问密码列时,密码列显示为加密,但以编程方式访问时,它会返回实际的未加密密码”。
最佳答案
试试这个:
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
每当您将新用户插入用户表时,请使用此存储过程。因此这将对密码进行加密并插入。
关于sql-server-2008 - 加密 SQL Server 中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12420161/