使用SQL 2005
我创建了一个通过密码加密的主密钥,然后使用服务主密钥加密了主密钥
然后我创建了一个ASYMMETRIC_KEY,用于加密我的SYMMETRIC_KEY,我使用SA用户进行SQL操作,并以域管理员身份登录到Windows服务器。
我的数据库中有一个用户,我的数据库只有dbo权限,然后我授予该用户对所有必要存储过程的执行权限,并且我也拒绝对这些存储过程进行视图定义。
存储过程给我带来麻烦,我在这里进行加密。这一切都在我的测试PC上的SQL2012上工作但现在我在生产服务器上使用sql 2005创建它并且它失败了
open symmetric key
MYKEY_NAME_SYM decryption by Asymmetric key MYKEY_NAME_ASYM
set @ENCRYPTVARIABLE = (select ENCRYPTBYKEY(KEY_GUID('MYKEY_NAME_SYM'), @ENCRYPTCOLUMN))
close symmetric key MYKEY_NAME_SYM
我收到的错误是:
Cannot find the symmetric key 'MKEY_NAME_SYM', because it does not exist or you do not have permission.
所以我猜我在我的数据库中使用的用户没有权限,但是当我尝试授予权限时
GRANT
VIEW DEFINITION ON SYMMETRIC KEY::MKEY_NAME_SYM TO [myuser]
我得到相同的错误找不到对称密钥或者我没有权限。
答案 0 :(得分:15)
管理用户在脚本控制台中编写:
--Grant View GRANT VIEW DEFINITION ON CERTIFICATE::[Certificate_Name] TO [user] GRANT VIEW DEFINITION ON SYMMETRIC KEY::[EncryptionKey_Name] TO [user] --Grant Control GRANT CONTROL ON CERTIFICATE::[Certificate_Name] TO [user]
答案 1 :(得分:3)
我需要切换SQL以使用Windows身份验证,因为唯一拥有权限的用户是domain \ admin用户,这是我创建密钥的用户。
一旦我切换到Windows身份验证,我就可以授予密钥权限,而且一切都很好
答案 2 :(得分:0)
我还没有看到别人提到的一件事:要通过对称或非对称密钥创建登录名,必须同时在MASTER数据库中创建密钥和登录名。
示例:
USE MASTER
IF NOT EXISTS (SELECT 1 FROM sys.asymmetric_keys where name = 'MySecret.AsymmetricKey') BEGIN
CREATE ASYMMETRIC KEY [AsymmetricKey]
FROM FILE='C:\temp\MyStrongNameKey.snk'
END
IF NOT EXISTS (SELECT 1 from sys.sql_logins where name = 'StrongNameKeyLogin') BEGIN
CREATE LOGIN [StrongNameKeyLogin]
FROM ASYMMETRIC KEY [AsymmetricKey]
END
GO
-- If necessary, do this here:
GRANT UNSAFE ASSEMBLY TO [StrongNameKeyLogin]
USE [MyDatabase]
-- Now you can create assemblies, or do whatever else you need that references the signed login