11

使用 SQL 2005

我创建了一个用密码加密的主密钥,然后用服务主密钥加密了主密钥

然后我创建了一个 ASYMMETRIC_KEY,我用它来加密我的 SYMMETRIC_KEY 我使用 SA 用户的 SQL 完成了所有这些操作,并以域管理员身份登录到 Windows 服务器。

我的数据库中有一个用户,该用户仅对我的数据库具有 dbo 权限,然后我授予该用户对所有必要的存储过程的执行权限,并且我还拒绝对这些相同的存储过程进行视图定义。

存储过程给我带来了麻烦,我在哪里进行加密是这里。这一切都在我的测试电脑上的 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]

我得到同样的错误找不到对称密钥或我没有权限。

4

3 回答 3

19

使用管理用户在脚本控制台中写入:

    --授予视图
    GRANT VIEW DEFINITION ON CERTIFICATE:: [Certificate_Name] TO [user] 
    GRANT VIEW DEFINITION ON SYMMETRIC KEY:: [EncryptionKey_Name] TO [user]

    --授予控制
    授予对证书的控制权:: [Certificate_Name][user]
于 2014-06-11T14:31:13.563 回答
3

I needed to switch SQL to use windows authentication as the only user that had permissions was the domain\admin user which is the user I created the key with.

Once I switched to windows authentication I was then able to grant permissions to the Keys and all was good

于 2013-09-25T16:56:26.540 回答
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
于 2020-02-15T23:29:56.587 回答