通过网络创建非对称密钥

问题描述:

我正在尝试使用asymmetric key来将add an assembly添加到SQL2008中的数据库中。通过网络创建非对称密钥

我们使用一个十六进制字符串(添加组件通过唯一的SQL查询服务器)

USE [master] 
GO 

IF NOT EXISTS (SELECT * from sys.asymmetric_keys where name = 'ManagedAsymmetricKey') 
BEGIN 
    CREATE ASYMMETRIC KEY ManagedAsymmetricKey FROM FILE = 'C:\Managed.dll' 
    CREATE LOGIN CLRLogin FROM ASYMMETRIC KEY ManagedAsymmetricKey 
    GRANT UNSAFE ASSEMBLY TO CLRLogin 
END 
GO 

USE [$dbName] 
GO 
CREATE ASSEMBLY [Managed] 
AUTHORIZATION [dbo] 
FROM 0x4D5A.... 
WITH PERMISSION_SET = UNSAFE 
GO 

这将在本地实例工作然而在我们收到的网络添加组件; The certificate, asymmetric key, or private key file does not exist or has invalid format.

我可能会错误地认为我应该首先添加密钥,我应该添加程序集,然后按照CREATE ASYMMETRIC KEY ManagedAsymmetricKey FROM ASSEMBLY [workingDB].[dbo].[Managed]的顺序执行某些操作?

FROM FILE =总是从SQL Server的角度来看。您应该将证书复制到数据库服务器上的本地驱动器。

您可以使用以下步骤来得到它的工作:

  • 外管局PERMISSION_SET运行您创建汇编语句(即使装配需要不安全执行)
  • 创建从组件
  • 非对称密钥
  • 放下你的装配
  • 创建非对称密钥
  • 登录授予登录不安全的组件权利

    CREATE ASSEMBLY [Managed] 
    AUTHORIZATION [dbo] 
    FROM 0x4D5A.... 
    WITH PERMISSION_SET = SAFE 
    
    CREATE ASYMMETRIC KEY ManagedAsymmetricKey FROM ASSEMBLY [Managed] 
    
    DROP ASSEMBLY [Managed] 
    
    CREATE LOGIN CLRLogin FROM ASYMMETRIC KEY ManagedAsymmetricKey 
    
    GRANT UNSAFE ASSEMBLY TO CLRLogin 
    
+1

对于临时组合件,则不需要设置'PERMISSION_SET'到'UNSAFE',因为你不需要从组件执行代码来创建的关键。这也意味着你不必在任何地方设置'TRUSTWORTHY'。除此之外,感谢聪明的黑客! – 2015-02-11 13:44:39

+0

因为问题中的程序集不安全,所以我提出了不安全的问题。如果你有一个安全的组件,这确实不是必需的。 – 2015-02-11 14:12:32

+0

我不是100%的,但我不认为组件本质上(不)安全。我的程序集包含只能以'UNSAFE'权限运行的代码,但是当我使用'PERMISSION_SET = SAFE'创建程序集时,SQL Server不会投诉。 – 2015-02-11 14:49:20