2016-03-21 70 views
1

我试图部署本地开发的C#SQL-CLR存储过程和程序集到DEV框的快速测试,并且获取各种被拒绝的访问消息。部署SQL CLR所需的SQL权限级别

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

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

问:上面的消息意味着DDLAdmin,但我是否需要更多?

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

我有麻烦在工作时所需要的乡亲最低权限的列表。

感谢您的帮助。

+0

发布错误消息,可能来自数据库或来自Windows服务器 – JLB

+0

什么版本的SQL Server?如果2012+,这个项目部署模型还是包部署模型?如果包部署模型,你在哪里部署SSIS包? – billinkc

+0

我决定将问题限制在SQL CLR中并单独询问SSIS问题 –

回答

3

上述消息意味着DDLAdmin

不,这并不意味着。它清楚地表明登录需要VIEW DEFINITION。虽然ddl_admin可能有效,但它可能比所需要的要多得多。然而,这就是说,为什么你不作为一个特权帐户部署?如果有的话,我很少看到一个没有以sysadmin运行的部署过程。那你怎么不是一个开发箱上的系统管理员?;-)

有手头两个问题:

  1. 的SSDT过程,做逆向工程,以便它可以拿出一个增量部署脚本,但不是让这个任何改变点,并且

  2. 一旦生成脚本就会发布/部署脚本。

你的错误是关于第1部分,但问题是,至少在它是如何措词,关于这两个部分。

因此,要解决第2部分,您需要CREATE权限(无论是按对象,还是在架构上,还是通过像ddl_admin这样的固定数据库角色)来创建对象。您还需要能够参加大会。关于大会的ALTER权限,ALTER ASSEMBLY的MSDN页面规定:

需要组件的ALTER权限。额外的要求如下:

  • 要改变的组件,其现有的权限集是EXTERNAL_ACCESS,需要EXTERNAL ACCESS ASSEMBLY在服务器上权限。
  • 要更改现有权限集为“不安全”的程序集,需要在服务器上有不安全组装权限。
  • 要将组件的权限集更改为EXTERNAL_ACCESS,需要服务器上的外部访问组件权限。要将程序集的权限集更改为UNSAFE,需要服务器上的UNSAFE ASSEMBLY权限。
  • 指定WITH UNCHECKED DATA,要求ALTER ANY SCHEMA权限。

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

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

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

7级专门处理安全/非对称密钥/登录的内容,但最好从6级开始,因为它是级别7和8的设置(它确实是一个必须被破坏的长文章up ;-)。

0

程序集所有者必须是您用于部署程序集的用户,或者所有者必须是该用户所属的角色。设置装配一个“安全”的许可

部署需要以下内容:

  • db_DDLAdmin - 这个权限授予创建和修改的组件的权限和对象部署
  • 数据库级视图定义类型 - 为了部署
  • 数据库级要求连接 - 授予连接到数据库中的“external_acc的

部署的能力ESS'许可或‘不安全’的权限设置组件需要以下附加权限:

  • Trustworthy数据库选项设置为ON
  • 您使用部署必须具有不安全大会或外部访问服务器权限的登录。

编号: Required Permissions for SQL Server Data Tools

+1

“TRUSTWORTHY”数据库选项需要为“ON”是绝对不正确的。只有在少数情况下才需要它,主要是在加载已经签名的第三方DLL时,您不能重新签名(典型情况是不受支持的.NET Framework库)。除非绝对没有其他办法,否则将TRUSTWORTHY设置为ON是非常糟糕的做法。 –

+0

我同意,我会非常犹豫地打开该选项。当然是最后的手段。但是,这正是MSDN所说的,所以我将它包含在内。 – WPrecht

+0

我只是看着,看到它写在那里,但它是相当具体的不正确。因此,这个建议不应该在这里传播。权限要求更加复杂,并且在尝试加载UNSAFE或EXTERNAL_ACCESS程序集时未显示TRUSTWORTHY ON或签名,密钥和登录信息时,会明确声明。另外,我不相信组件的所有者需要成为部署组件的人员,但我只作为系统管理员进行部署,因此没有对其进行测试。 –