我想部署自己的CLR,这需要不安全的权限和将数据库设置为可信任。
我发现可以使用非对称密钥签名具有外部访问权限的程序集,但我没有找到一种方法来使用它签名不安全的程序集。
这是否可能?如果是,应该如何操作?
我发现可以使用非对称密钥签名具有外部访问权限的程序集,但我没有找到一种方法来使用它签名不安全的程序集。
这是否可能?如果是,应该如何操作?
TRUSTWORTHY ON
,这是一种非常常见但不好的做法。master
中的非对称密钥时,采取相同的步骤,然后从该非对称密钥创建登录。唯一的区别是将基于密钥的登录授予UNSAFE ASSEMBLY
权限,而不是EXTERNAL ACCESS ASSEMBLY
权限。UNSAFE ASSEMBLY
权限允许设置程序集为EXTERNAL ACCESS
,但同时具备两个权限也无妨。SQL Server 2017引入了一个新的安全功能(“CLR strict security”,高级选项),默认启用,并要求所有程序集,甚至标记为SAFE
的程序集都使用非对称密钥(即强名称)或证书进行签名,并拥有基于用于签署程序集的内容的登录(具有UNSAFE ASSEMBLY
权限)。有关如何使用或不使用Visual Studio / SSDT使其工作的详细信息,请参见我的以下两篇文章:
对于任何希望使用Visual Studio签署和部署CLR项目的人:
打开Visual Studio并进入项目属性。
打开SQL Management Studio并通过替换占位符运行以下脚本。
在运行以下命令之前,请确保您有权限访问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
这些脚本是从创建程序集中获取的。