在 SQL Server 中全局保存一个变量它自己并在需要时使用它

IT *_*her 2 sql-server stored-procedures t-sql sql-server-2008-r2

我们正在使用ENCRYPTBYPASSPHRASE来加密某些数据库的某些列。每次我们需要使用 DECRYPTBYPASSPHRASE 传递密码时,都要解密这些值。

所以我计划创建一个如下所示的存储过程

CREATE function [dbo].[SQLEncrypt](@str varchar(max)) returns varchar(max) 
as 
 begin
 declare @test nvarchar(max)
 set @test=''


    set @test =   convert(varchar(MAX),DECRYPTBYPASSPHRASE ('password',@str))



 return @test
END

GO
Run Code Online (Sandbox Code Playgroud)

我可以使用如下所示的这个存储过程来解密一列

----usgae---

select master.dbo.SQLEncrypt(columnname) from tablename--
-----------------
Run Code Online (Sandbox Code Playgroud)

现在我打算将此密码全局存储在 SQL 服务器中的某个位置(不知道是否可能),然后在存储过程中使用它。无论如何都可以做到吗?我也可以对用户隐藏密码吗?

Rem*_*anu 9

别。

虽然可以使用context_info,但对于密码来说,这是一个非常糟糕的选择。所有具有 VIEW SERVER STATE 的用户都将在sys.dm_exec_sessions. SQL Profiler 在您设置它时不会知道您在做什么,并且不会在生成的事件中混淆它。还有更多类似的坏处。

而是使用适当的加密层次结构。不要通过密码加密数据,永远不是正确的选择。而是使用对称密钥对其进行加密。然后使用密码打开会话中的密钥,请参阅OPEN SYMMETRIC KEY。密钥将在您的会话中可用,并且数据可以自动解密。这是推荐的方法,不要试图超越它。