我用下面的代碼創建了SQL2012的對稱密鑰使用對稱密鑰相應的權限(身份登錄的Windows管理員用戶):格蘭特在存儲過程
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '34trg45trgf546t';
CREATE CERTIFICATE SSCert01 WITH SUBJECT = 'SS Certificate 01';
CREATE SYMMETRIC KEY SSN_Key_01 WITH ALGORITHM = TRIPLE_DES ENCRYPTION BY CERTIFICATE SSCert01;
一旦做我申請加密某些數據庫列。仍然以管理員身份登錄,我可以使用密鑰成功解密列:
OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE SSCert01;
SELECT
name,
surname,
CONVERT(nvarchar(50),DECRYPTBYKEY(PasswordEnc)) as DecryptedPassword
FROM
[tbl_Users];
CLOSE SYMMETRIC KEY SSN_Key_01;
然後,我將上述代碼放入存儲過程。問題是我的應用程序使用兩個角色訪問SQL,這些角色訪問相應的proc。當這兩種角色的嘗試執行包含上述代碼PROC,我看到此錯誤:
Cannot find the certificate 'SSCert01', because it does not exist or you do not have permission. The key 'SSN_Key_01' is not open. Please open the key before using it.
當我登錄爲任一角色,它們不能看到鍵或證書。那麼,任何人都可以建議WHICH授予角色的權限,以便他們可以使用存儲過程中的密鑰/證書(僅)來加密/解密數據。除了加密/解密之外,角色不應該被允許使用密鑰/證書執行任何功能。我曾看過MSDN/Google,但我都不明白。
UPDATE 下面的代碼允許角色使用PROC的,但我很擔心,CONTROL
是太大出入。任何人都可以提供一些清晰度?
GRANT CONTROL ON CERTIFICATE :: SSCert01 TO Role001;
GRANT CONTROL ON SYMMETRIC KEY :: SSN_Key_01 TO Role001;
謝謝,我不知道'EXECUTE AS'。不知道這是更多的解決方法,但...? – EvilDr
@EvilDr,好吧,你就是這麼做的。似乎沒有更好的方法。您需要對證書進行CONTROL權限才能解密密鑰。如果您不想按照此答案 –
中所述使用存儲過程來授予角色,那麼很好。 'GRANT CONTROL'是否允許角色/用戶使用DROP或ALTER證書/密鑰? – EvilDr