使用非对称密钥签名不安全的程序集

问题描述 投票:4回答:2

我想部署自己的CLR,这将需要不安全的权限并将数据库设置为可信任。

我在interwebz上发现可以用非对称密钥通过外部访问对程序集进行签名,但是我没有找到一种使用不对称程序集对不安全程序集进行签名的方法。

有可能吗?如果是,请问该怎么做?

sql-server sqlclr assembly-signing
2个回答
4
投票

不幸的是,感谢您进行了更深入的研究,以避免将数据库设置为TRUSTWORTHY ON,这是非常普遍的做法。

采取相同的步骤来签署程序集并从Assembly DLL在master中创建非对称密钥,然后从该非对称密钥创建登录名。唯一的区别是然后向该基于密钥的登录授予UNSAFE ASSEMBLY权限,而不是EXTERNAL ACCESS ASSEMBLY权限。

您永远都不会[[需要这两个权限,因为UNSAFE ASSEMBLY权限允许将程序集设置为EXTERNAL ACCESS,尽管同时拥有这两个权限也没有关系。

有关一般信息,有关使用SQLCLR的更多信息,请参阅我在SQL Server Central上编写的系列文章(阅读其内容需要免费注册:]

Stairway to SQLCLR

如果您使用Visual Studio / SSDT部署/发布SQLCLR项目,请参阅该Stairway系列文章中的“ Stairway to SQLCLR Level 7: Development and Security”,因为它显示了一种自动创建非对称密钥和基于密钥的登录名的技术,但都不是可以使用常规的SSDT对象进行处理。下一篇文章(将要发表)将显示另一种甚至更简单的技术。


关于SQL Server 2017的更新

SQL Server 2017引入了一项新的安全功能(“ CLR严格安全性”,一个高级选项),该功能默认情况下处于启用状态,并且要求所有程序集(即使标记为SAFE的程序集)也必须使用非对称密钥(即,强名称或证书,并具有一个具有UNSAFE ASSEMBLY权限的登录名(基于用于对该程序集进行签名的内容)。有关在有或没有Visual Studio / SSDT的情况下如何实现此功能的详细信息,请参阅以下两篇文章:

  • [请避免使用新的受信任的程序集”功能”,因为它具有弊大于利的缺点,更不用说它首先完全没有必要,因为现有功能已经解决了“受信任的程序集”所要解决的问题。有关此内容的完整详细信息以及处理现有未签名程序集的正确方法的演示,请参见:SQLCLR vs. SQL Server 2017, Part 4: “Trusted Assemblies” – The Disappointment

  • 0
    投票
    对于任何想使用Visual Studio签名和部署CLR项目的人

    1. 打开Visual Studio并转到项目属性。

        根据需要,将“权限级别”更改为EXTERNAL_ACCESS或UNSAFE。
    2. 按下“签名”按钮,生成一个新密钥,并如下图所示对项目进行签名
  • enter image description here

      构建项目
  • 通过替换占位符,打开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

      从Visual Studio发布项目。完成:)
  • 脚本取自Creating an assembly
  • © www.soinside.com 2019 - 2024. All rights reserved.