Sql-Server
在 SQL Server 中全域保存一個變數,並在需要時使用它
我們正在使用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
我可以使用如下所示的儲存過程來解密列
----usgae--- select master.dbo.SQLEncrypt(columnname) from tablename-- -----------------
現在我打算將此密碼全域儲存在 SQL Server 中的某個地方(不知道是否可能),然後在儲存過程中使用它。無論如何都可以做到嗎?我也可以對使用者隱藏密碼嗎?
別。
雖然可以使用
context_info
,但對於密碼來說,這是一個非常非常糟糕的選擇。所有具有 VIEW SERVER STATE 的使用者都會在sys.dm_exec_sessions
. SQL Profiler 在您設置它時不會知道您在做什麼,也不會在生成的事件中混淆它。還有更多類似的壞處。而是使用適當的加密層次結構。不要用密碼加密數據,永遠不是正確的選擇。而是使用對稱密鑰對其進行加密。然後使用密碼在會話中打開密鑰,請參閱
OPEN SYMMETRIC KEY
。密鑰將在您的會話中可用,並且可以自動解密數據。這是推薦的方法,不要試圖超越它。
Context_info 就像一個全域變數。它是二進制的,因此每次使用時都需要一些工作來提取密碼。BOL 有詳細資訊和範例。