【问题标题】:Cannot find the symmetric key '', because it does not exist or you do not have permission找不到对称密钥'',因为它不存在或您没有权限
【发布时间】:2013-10-01 03:26:42
【问题描述】:

使用 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]

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

【问题讨论】:

  • 我遇到了一些权限问题,我认为ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY 已解决。
  • 是的,我也运行了该命令,但仍然收到错误消息。我觉得这与我的数据库用户有关,该用户对我的存储过程具有权限,但对密钥没有权限。但是当我尝试授予该用户对我的加密密钥的权限时,它说我没有权限这样做并且我使用的是 sql 的 SA 帐户
  • 看看this MSDN article。我很确定我也必须授予 REFERENCES ...
  • 谢谢,但它根本不允许我授予任何权限,即使我使用与创建密钥相同的用户,它也会失败说我没有权限

标签: sql sql-server-2005 encryption


【解决方案1】:

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

--授予视图 将 CERTIFICATE::[Certificate_Name] 上的视图定义授予 [user] 将 SYMMETRIC KEY::[EncryptionKey_Name] 上的视图定义授予 [user] --授予控制 将证书控制权::[Certificate_Name] 授予 [user]

【讨论】:

    【解决方案2】:

    我需要切换 SQL 以使用 windows 身份验证,因为唯一拥有权限的用户是域\管理员用户,这是我创建密钥的用户。

    一旦我切换到 Windows 身份验证,我就能够授予密钥权限,一切都很好

    【讨论】:

      【解决方案3】:

      我没有看到其他人提到的一件事:要从对称或非对称密钥创建登录,密钥和登录都必须在 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
      

      【讨论】:

        猜你喜欢
        • 2011-11-22
        • 2016-11-22
        • 2015-05-27
        • 2010-12-08
        • 2017-03-19
        • 1970-01-01
        • 2013-04-09
        • 2021-10-03
        • 2021-07-22
        相关资源
        最近更新 更多