部署SQL CLR所需的SQL权限级别

时间:2016-03-21 16:30:14

标签: sql-server sqlclr

我尝试将本地开发的C#SQL-CLR存储过程和程序集的快速测试部署到DEV框,并获得各种拒绝访问消息。

  

逆向工程操作无法继续,因为您没有   拥有数据库的“查看定义”权限。

问:在服务器上部署SQL CLR需要哪些权限组或级别?

问:上面的消息暗示DDLAdmin,但是我还需要更多信息吗?

VERSION: Microsoft SQL Server 2008 R2(SP3) - 10.50.6000.34(X64)

我无法获得工作人员所需的最低权限列表。

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

  

上面的消息暗示DDLAdmin

不,这并不意味着。它明确指出登录需要VIEW DEFINITION。虽然ddl_admin可能有效,但可能远远超过必要。但是,话虽如此,为什么不部署为特权帐户?如果有的话,我很少看到没有以sysadmin运行的部署过程。那你怎么不是开发箱上的系统管理员? ; - )

手头有两个问题:

  1. 执行逆向工程的SSDT流程,以便它可以提供增量部署脚本,但此时不进行任何更改,

  2. 生成脚本后发布/部署脚本的行为。

  3. 你的错误与第1部分有关,但问题是,至少在措辞方面,关于这两个部分。

    因此,为了解决第2部分,您需要CREATE权限(无论是每个对象,还是模式,还是通过固定的DB角色,如ddl_admin)来创建对象。您还需要能够ALTER大会。关于程序集的ALTER权限,ALTER ASSEMBLY状态的MSDN页面:

      

    需要对程序集具有ALTER权限。附加要求如下:

         
        
    • 要更改现有权限集为EXTERNAL_ACCESS的程序集,需要在服务器上具有 EXTERNAL ACCESS ASSEMBLY 权限。
    •   
    • 要更改现有权限集为UNSAFE的程序集,需要在服务器上具有 UNSAFE ASSEMBLY 权限。
    •   
    • 要将程序集的权限集更改为EXTERNAL_ACCESS,需要在服务器上具有 EXTERNAL ACCESS ASSEMBLY 权限。要将程序集的权限集更改为UNSAFE,需要在服务器上具有 UNSAFE ASSEMBLY 权限。
    •   
    • 指定WITH UNCHECKED DATA,需要 ALTER ANY SCHEMA 权限。
    •   

    如果要使用PERMISSION_SET EXTERNAL_ACCESSUNSAFE创建程序集,然后在创建程序集之前,则应签署汇编(在任何情况下都可能是一个好主意),然后在该汇编中[master]创建一个非对称密钥,然后从该非对称密钥创建一个登录,最后授予该登录EXTERNAL ACCESS ASSEMBLY或{{ 1}}。除非您绝对必须,否则将包含程序集的数据库设置为UNSAFE ASSEMBLY,例如在加载不受支持的.NET Framework库的情况下,因为您无法重新签名。

    有关在使用Visual Studio / SSDT时处理非对称密钥和登录的创建的分步指南,请参阅我在SQL Server Central上发布的3部分文章,该文章解决了VS和VS的这些和其他细微差别SSDT:

    Stairway to SQLCLR Level 6: Development Tools Intro(本网站需要免费注册)。

    第7级专门处理安全/非对称密钥/登录的内容,但最好从级别6开始,因为它是级别7和8的设置(这是一篇必须要分解的长文章) ; - 。)

答案 1 :(得分:0)

程序集所有者必须是您用于部署程序集的用户,否则所有者必须是该用户所属的角色。

部署“安全”权限集程序集需要以下内容:

  • db_DDLAdmin - 此权限授予您部署的程序集和对象类型的CREATE和ALTER权限
  • 数据库级别视图定义 - 部署
  • 所必需的
  • 数据库级CONNECT - 授予连接数据库的能力

部署'external_access'权限或'不安全'权限集程序集需要以下附加权限:

  • TRUSTWORTHY数据库选项设置为ON
  • 用于部署的登录名必须具有“不安全程序集”或“外部访问服务器”权限。

价: Required Permissions for SQL Server Data Tools