我想部署自己的CLR,这将需要不安全的权限并将数据库设置为可信任。
我在interwebz上发现可以用非对称密钥通过外部访问对程序集进行签名,但是我没有找到一种使用不对称程序集对不安全程序集进行签名的方法。
有可能吗?如果是,请问该怎么做?
不幸的是,感谢您进行了更深入的研究,以避免将数据库设置为TRUSTWORTHY ON
,这是非常普遍的做法。
采取相同的步骤来签署程序集并从Assembly DLL在master
中创建非对称密钥,然后从该非对称密钥创建登录名。唯一的区别是然后向该基于密钥的登录授予UNSAFE ASSEMBLY
权限,而不是EXTERNAL ACCESS ASSEMBLY
权限。
您永远都不会[[需要这两个权限,因为UNSAFE ASSEMBLY
权限允许将程序集设置为EXTERNAL ACCESS
,尽管同时拥有这两个权限也没有关系。
如果您使用Visual Studio / SSDT部署/发布SQLCLR项目,请参阅该Stairway系列文章中的“ Stairway to SQLCLR Level 7: Development and Security”,因为它显示了一种自动创建非对称密钥和基于密钥的登录名的技术,但都不是可以使用常规的SSDT对象进行处理。下一篇文章(将要发表)将显示另一种甚至更简单的技术。
SAFE
的程序集)也必须使用非对称密钥(即,强名称或证书,并具有一个具有UNSAFE ASSEMBLY
权限的登录名(基于用于对该程序集进行签名的内容)。有关在有或没有Visual Studio / SSDT的情况下如何实现此功能的详细信息,请参阅以下两篇文章:在运行以下命令之前,请确保您具有访问MASTER数据库和CLR项目目录的权限。
USE master;
GO
-- Create asymmetric key
CREATE ASYMMETRIC KEY [PROJECT_NAME]_Key
FROM EXECUTABLE FILE
= [CLR_PROJECT_DIRECTORY]\bin\Debug\[PROJECT_NAME].dll'
-- Create a new login with the asymmetric key
CREATE LOGIN [PROJECT_NAME]_Login
FROM ASYMMETRIC KEY [PROJECT_NAME]_Key
-- Grant External access to login
GRANT EXTERNAL ACCESS ASSEMBLY TO [PROJECT_NAME]_Login
GO
-- Uncomment the following for UNSAFE assembly
-- GRANT UNSAFE ASSEMBLY TO [PROJECT_NAME]_Login
从Visual Studio发布项目。完成:)