Sql server 网络上的非对称密钥创建
我正在尝试使用一个 我们使用十六进制字符串添加程序集(仅通过sql查询将程序集添加到服务器) 这将在本地实例上工作,但是通过我们接收的网络;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的角度进行操作。您必须将证书复制到数据库服务器上的本地驱动器。您可以使用以下步骤使其正常工作:
证书、非对称密钥或私钥文件不存在或格式无效。
我可能错误地认为我应该先添加密钥,然后添加程序集,然后根据程序集[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