Sql server 网络上的非对称密钥创建

Sql server 网络上的非对称密钥创建,sql-server,sql-server-2008,assemblies,public-key,Sql Server,Sql Server 2008,Assemblies,Public Key,我正在尝试使用一个 我们使用十六进制字符串添加程序集(仅通过sql查询将程序集添加到服务器) 这将在本地实例上工作,但是通过我们接收的网络; 证书、非对称密钥或私钥文件不存在或格式无效。 我可能错误地认为我应该先添加密钥,然后添加程序集,然后根据程序集[workingDB].[dbo].[Managed].[code>?从文件=创建非对称密钥管理器Symmetrickey始终是从SQL Server的角度进行操作。您必须将证书复制到数据库服务器上的本地驱动器。您可以使用以下步骤使其正常工作:

我正在尝试使用一个

我们使用十六进制字符串添加程序集(仅通过sql查询将程序集添加到服务器)

这将在本地实例上工作,但是通过我们接收的网络;
证书、非对称密钥或私钥文件不存在或格式无效。


我可能错误地认为我应该先添加密钥,然后添加程序集,然后根据程序集[workingDB].[dbo].[Managed].[code>?

从文件=创建非对称密钥管理器Symmetrickey始终是从SQL Server的角度进行操作。您必须将证书复制到数据库服务器上的本地驱动器。

您可以使用以下步骤使其正常工作:

  • 在设置了安全权限的情况下运行create assembly语句(即使程序集需要不安全的执行)
  • 从程序集创建非对称密钥
  • 放下你的组件
  • 从非对称密钥创建登录
  • 授予登录程序集权限

    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
    

对于临时程序集,您不需要将
权限设置
设置为
不安全
,因为您不需要从程序集中执行代码来创建密钥。这也意味着你不必在任何地方设置可信的。除此之外,谢谢你聪明的黑客!我之所以说不安全是因为问题中的组件不安全。如果你有一个安全的程序集,这确实是不需要的。我不是100%同意这一点,但我不认为程序集本质上是(非)安全的。我的程序集包含仅使用
SAFE
权限运行的代码,但是当我使用
PERMISSION\u SET=SAFE
创建程序集时,SQL Server不会抱怨。因此
创建非对称密钥
即使程序集只有
SAFE
权限也可以工作。之后,您可以使用非对称密钥(以及相关的登录)将权限集更改为
不安全
。我已经测试过了,它对我有效。我不需要让主数据库可信。我根据安全权限集方法更新了脚本
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