2011-11-29 90 views
2

我创建使用证书像这样我的钥匙:无法打开的证书作为SQL用户帐户对称密钥

CREATE SYMMETRIC KEY some_Key_01
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE myCert;
GO

GRANT VIEW DEFINITION ON CERTIFICATE::myCert TO sqlUser;
GO

GRANT VIEW DEFINITION ON SYMMETRIC KEY::some_Key_01 TO sqlUser;
GO

然后我尝试打开与我们它像这样:

OPEN SYMMETRIC KEY some_Key_01
DECRYPTION BY CERTIFICATE myCert;
GO
SELECT CONVERT(datetime, DecryptByKey(EncryptedField))
AS 'DecryptedField'
FROM MyTable;
GO

但我得到的消息:
Msg 15151, Level 16, State 1, Line 23
Cannot find the certificate 'myCert', because it does not exist or you do not have permission.

回答

6

你需要有证书上的control权限:

GRANT CONTROL ON CERTIFICATE::myCert TO sqlUser; 
GO 

并授予关键references权限:

GRANT REFERENCES ON SYMMETRIC KEY::some_Key_01 TO sqlUser; 
GO 
+2

感谢。请问,如果我问,为什么参考关键?为什么不只是查看定义?另外,为什么控制权,而不是证书的某些子集的权限? –