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
- 您用于部署的登录名必须具有不安全程序集或外部访问服务器权限。
The message above implies DDLAdmin
不,这并不意味着。它明确指出登录需要 VIEW DEFINITION
。虽然 ddl_admin
可能有效,但它可能比必要的要多得多。但是,话虽如此,您为什么不部署为特权帐户?我很少(如果有的话)看到没有 运行 和 sysadmin
的部署过程。那你怎么不是开发箱上的系统管理员? ;-)
手头有两个问题:
执行逆向工程的 SSDT 进程,以便它可以提出增量部署脚本,但此时未进行任何更改,并且
脚本生成后发布/部署的行为。
您的错误与第 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_ACCESS
或 UNSAFE
中的 PERMISSION_SET
创建程序集,则 在 创建程序集之前,您应该已经签署了程序集(在任何情况下都可能是个好主意),然后从该程序集在 [master]
中创建一个非对称密钥,然后从该非对称密钥创建一个登录名,最后授予该登录名 EXTERNAL ACCESS ASSEMBLY
或 UNSAFE 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 级的设置(这确实是一篇很长的文章,必须分手了 ;-).
我正在尝试将本地开发的 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
- 您用于部署的登录名必须具有不安全程序集或外部访问服务器权限。
The message above implies
DDLAdmin
不,这并不意味着。它明确指出登录需要 VIEW DEFINITION
。虽然 ddl_admin
可能有效,但它可能比必要的要多得多。但是,话虽如此,您为什么不部署为特权帐户?我很少(如果有的话)看到没有 运行 和 sysadmin
的部署过程。那你怎么不是开发箱上的系统管理员? ;-)
手头有两个问题:
执行逆向工程的 SSDT 进程,以便它可以提出增量部署脚本,但此时未进行任何更改,并且
脚本生成后发布/部署的行为。
您的错误与第 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_ACCESS
或 UNSAFE
中的 PERMISSION_SET
创建程序集,则 在 创建程序集之前,您应该已经签署了程序集(在任何情况下都可能是个好主意),然后从该程序集在 [master]
中创建一个非对称密钥,然后从该非对称密钥创建一个登录名,最后授予该登录名 EXTERNAL ACCESS ASSEMBLY
或 UNSAFE 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 级的设置(这确实是一篇很长的文章,必须分手了 ;-).