我尝试将本地开发的C#SQL-CLR存储过程和程序集的快速测试部署到DEV框,并获得各种拒绝访问消息。
逆向工程操作无法继续,因为您没有 拥有数据库的“查看定义”权限。
问:在服务器上部署SQL CLR需要哪些权限组或级别?
问:上面的消息暗示DDLAdmin
,但是我还需要更多信息吗?
VERSION: Microsoft SQL Server 2008 R2(SP3) - 10.50.6000.34(X64)
我无法获得工作人员所需的最低权限列表。
感谢您的帮助。
答案 0 :(得分:3)
上面的消息暗示
DDLAdmin
不,这并不意味着。它明确指出登录需要VIEW DEFINITION
。虽然ddl_admin
可能有效,但可能远远超过必要。但是,话虽如此,为什么不部署为特权帐户?如果有的话,我很少看到没有以sysadmin
运行的部署过程。那你怎么不是开发箱上的系统管理员? ; - )
手头有两个问题:
执行逆向工程的SSDT流程,以便它可以提供增量部署脚本,但此时不进行任何更改,
生成脚本后发布/部署脚本的行为。
你的错误与第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_ACCESS
或UNSAFE
创建程序集,然后在创建程序集之前,则应签署汇编(在任何情况下都可能是一个好主意),然后在该汇编中[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)
程序集所有者必须是您用于部署程序集的用户,否则所有者必须是该用户所属的角色。
部署“安全”权限集程序集需要以下内容:
部署'external_access'权限或'不安全'权限集程序集需要以下附加权限: