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

SQL Permissions Levels Needed to Deploy SQL CLR

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

The reverse engineering operation cannot continue because you do not have View Definition permission on the database.

问: 我需要在服务器上使用什么权限组或级别才能部署 SQL CLR?

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

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

我无法从工作人员那里获取所需的最低权限列表。

感谢您的帮助。

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

'safe' 权限集程序集的部署需要以下内容:

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

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

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

参考: Required Permissions for SQL Server Data Tools

The message above implies DDLAdmin

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

手头有两个问题:

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

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

您的错误与第 1 部分有关,但问题是,至少在措辞上,这两个部分都是如此。

因此,要解决第 2 部分,您需要 CREATE 权限(无论是针对每个对象,还是针对架构,或者通过 ddl_admin 等固定数据库角色)来创建对象。您还需要能够 ALTER 大会。关于程序集的 ALTER 权限,ALTER ASSEMBLY 的 MSDN 页面指出:

Requires ALTER permission on the assembly. Additional requirements are as follows:

  • To alter an assembly whose existing permission set is EXTERNAL_ACCESS, requires EXTERNAL ACCESS ASSEMBLY permission on the server.
  • To alter an assembly whose existing permission set is UNSAFE requires UNSAFE ASSEMBLY permission on the server.
  • To change the permission set of an assembly to EXTERNAL_ACCESS, requires EXTERNAL ACCESS ASSEMBLY permission on the server. To change the permission set of an assembly to UNSAFE, requires UNSAFE ASSEMBLY permission on the server.
  • Specifying WITH UNCHECKED DATA, requires ALTER ANY SCHEMA permission.

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

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

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

第 7 级专门处理安全/非对称密钥/登录等问题,但最好从第 6 级开始,因为它是第 7 级和第 8 级的设置(这确实是一篇很长的文章,必须分手了 ;-).