sql-server - 无法将 SQLCLR 程序集添加到数据库,Msg 300

标签 sql-server sql-server-2008 permissions sqlclr

我在将 SQLCLR 程序集添加到数据库时遇到问题,但我的同事没有问题。尽管我们确实有不同的访问级别,但我们无法弄清楚为什么我会收到这样的错误消息。

这是我的代码:

USE [mydatabase]
GO

CREATE ASSEMBLY [My.Assembly]
AUTHORIZATION [dbo]
FROM 'C:\Program Files\MyStuff\My.Assembly.dll'
WITH PERMISSION_SET = UNSAFE
GO

这是我的错误:

Msg 300, Level 14, State 1, Line 3
UNSAFE ASSEMBLY permission was denied on object 'server', database 'master'.

想法?

最佳答案

请不要向 sysadmin 固定服务器角色添加登录名,以避免出现此错误。完全没有必要!

接受的答案是不正确的,不是因为它不起作用(它确实起作用),而是因为不需要将整个实例的完全控制权授予登录名,只是为了执行有特定权限的操作。您不会仅仅为了授予 Windows 登录域管理员对特定共享或文件夹的删除权限而将其设置为域管理员。

需要明确的是,这不是发布者的错,因为他们正确引用了 MSDN 文档。问题在于 CREATE ASSEMBLY 的 MSDN 文档不正确。 documentation for SQL Server 2008 R2不幸的是,确实声明登录必须位于sysadmin服务器角色中。然而,it has since been corrected声明:

If PERMISSION_SET = UNSAFE is specified, requires UNSAFE ASSEMBLY permission on the server.

此权限,UNSAFE ASSEMBLY,与错误消息中所述的权限完全相同:

UNSAFE ASSEMBLY permission was denied on object 'server', database 'master'

意思是,所需要做的就是执行以下操作(一次):

USE [master];
GRANT UNSAFE ASSEMBLY TO [AD_domain_name\windows_login_name]; -- for Windows Logins

或者:

USE [master];
GRANT UNSAFE ASSEMBLY TO [sql_login_name];  -- for SQL Server Logins

您需要位于[master]数据库中的原因是,此权限是服务器级别的权限,而不是数据库级别的权限,需要应用于登录(存在于服务器级别),而不是用户(存在于数据库级别)。

这就是为什么错误消息引用对象'server'(因为它是服务器级权限)和数据库'master'(因为登录存在于[master] 数据库,并且仅当查询的当前数据库设置为 [master] 时才能修改。

我已经使用登录进行了测试,当尝试加载标记为 WITH PERMISSION_SET = UNSAFE 的程序集时,该登录会收到问题中显示的错误消息(即 Msg 300) >。然后,我授予了 UNSAFE ASSEMBLY 权限,并且登录能够加载 UNSAFE 程序集;不需要(甚至尝试过)任何sysadmin成员(member)资格。我对此进行了测试:SQL Server 2005 SP4、SQL Server 2008 R2 RTM 和 SQL Server 2012 SP3。

关于sql-server - 无法将 SQLCLR 程序集添加到数据库,Msg 300,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6190301/

相关文章:

mysql - 学习 SQL Server 2008 和存储过程

ruby-on-rails - 在 Windows 7 上使用来自 ruby​​ 的 wicked_pdf 的权限被拒绝

我们可以在内核中打开文件之前检查文件的读写权限吗

sql - 当中间列可以是任何内容时,是否使用 3 列 SQL 索引?

sql-server - sql server express 2008 r2 客户端和服务器在同一台计算机上运行的最佳协议(protocol)是什么

c# - 分离本地数据库.mdf,复制,附加新文件

mysql - 在另一列中具有不同值的 Id 列需要用特殊值显示

Facebook user_groups 权限不适用于网络应用程序?

sql-server - Pentaho Spoon 工具转换顺序

sql-server - 添加不带 DEFAULT 但 WITH VALUES 的 NOT NULL 列