我的表格TblUserLogin
包含LoginID int
,Password varchar(50)
,LoginUserName varchar(150)
,Designation varchar(100)
列。
我的要求是,每当我们对此表使用select
语句时,我们都能看到输入的密码(这是敏感信息)。
是否有任何方法可以加密密码列,以便我们在使用select
语句时以加密方式查看信息,并且不会影响访问密码列或插入的代码新密码?
简单来说,“密码列在使用select
语句从Management Studio访问时显示为加密,但在以编程方式访问时,它会返回实际的非加密密码”。
答案 0 :(得分: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。这将加密密码并插入。
答案 1 :(得分:1)
一般情况下,除非您无法避免,否则不应将密码以明文或可逆加密方式存储在数据库中。
相反,你应该存储密码的哈希值,然后当你需要比较它时,哈希用户输入并比较哈希值。
答案 2 :(得分:0)
您可以在sql server 2008中加密密码
阅读this文章,非常清楚地描述