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 服务器中的某个位置(不知道是否可能),然后在存储过程中使用它。无论如何都可以做到吗?我也可以对用户隐藏密码吗?
虽然可以使用context_info,但对于密码来说,这是一个非常糟糕的选择。所有具有 VIEW SERVER STATE 的用户都将在sys.dm_exec_sessions. SQL Profiler 在您设置它时不会知道您在做什么,并且不会在生成的事件中混淆它。还有更多类似的坏处。
而是使用适当的加密层次结构。不要通过密码加密数据,永远不是正确的选择。而是使用对称密钥对其进行加密。然后使用密码打开会话中的密钥,请参阅OPEN SYMMETRIC KEY。密钥将在您的会话中可用,并且数据可以自动解密。这是推荐的方法,不要试图超越它。