sql-server-2008 - 加密 SQL Server 中的列

标签 sql-server-2008

我有一个表TblUserLogin,其中包含列LoginID intPassword 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/

相关文章:

sql - 为什么 sql case 不适用于 int 列的 null 条件

c# - 为什么我的 SqlConnection 在关闭后仍保留在 SSMS 进程列表中?

sql - 如何在连接多个表时使用 GROUP BY 连接字符串?

java - 加入 hibernate 状态

sql-server-2008 - 在此查询中使用 Blob 列要求查询主题必须具有键或唯一索引

sql-server-2008 - 从选择查询中设置参数值

php - CakePHP 3.x : Query to exclude records in which a field can be either NULL or empty ('' )

sql-server - SQl Server 仍然收到 "Timeout expired. The timeout period elapsed"错误

sql-server - 如何在 Multi-Tenancy 应用程序中更新所有租户的所有架构?

sql-server - 触发器和行版本控制信息