【发布时间】:2014-03-07 15:56:02
【问题描述】:
我使用以下代码在 SQL2012 中创建了一个对称密钥(以 Windows Admin 用户身份登录):
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,这两个角色访问适当的过程。当这两个角色中的任何一个尝试执行包含上述代码的过程时,我看到了这个错误:
找不到证书“SSCert01”,因为它 不存在或您没有权限。密钥“SSN_Key_01”是 没开。使用前请打开钥匙。
当我以任一角色登录时,他们看不到密钥或证书。因此,任何人都可以建议授予角色哪些权限,以便他们可以(仅)在存储过程中使用密钥/证书来加密/解密数据。除了加密/解密之外,不应允许角色使用密钥/证书执行任何功能。我看过 MSDN/Google 并没有更聪明。
更新
以下代码允许角色使用 proc,但我担心CONTROL 访问权限过多。谁能提供一些说明?
GRANT CONTROL ON CERTIFICATE :: SSCert01 TO Role001;
GRANT CONTROL ON SYMMETRIC KEY :: SSN_Key_01 TO Role001;
【问题讨论】:
标签: sql-server tsql sql-server-2012