通过网络创建非对称密钥
问题描述:
我正在尝试使用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
对于临时组合件,则不需要设置'PERMISSION_SET'到'UNSAFE',因为你不需要从组件执行代码来创建的关键。这也意味着你不必在任何地方设置'TRUSTWORTHY'。除此之外,感谢聪明的黑客! – 2015-02-11 13:44:39
因为问题中的程序集不安全,所以我提出了不安全的问题。如果你有一个安全的组件,这确实不是必需的。 – 2015-02-11 14:12:32
我不是100%的,但我不认为组件本质上(不)安全。我的程序集包含只能以'UNSAFE'权限运行的代码,但是当我使用'PERMISSION_SET = SAFE'创建程序集时,SQL Server不会投诉。 – 2015-02-11 14:49:20