請做不是添加一個登錄到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]
數據庫中的原因是,此權限是需要應用於登錄(服務器級別存在)的服務器級權限,而不是數據庫級權限,而不是用戶(它們存在於數據庫級別)。
這就是爲什麼錯誤消息引用object 'server'
(因爲它是一個服務器級別的權限)和database 'master'
(因爲登錄的[master]
數據庫存在,當查詢當前數據庫設置爲[master]
纔可以修改) 。
我試圖加載一個標記爲WITH PERMISSION_SET = UNSAFE
的程序集時,我用一個登錄測試了這個問題(即Msg 300
)中顯示的錯誤信息。然後,我授予UNSAFE ASSEMBLY
權限,並且登錄可以加載UNSAFE
程序集;沒有sysadmin
成員資格是必需的(或甚至企圖)。我對此進行了測試:SQL Server 2005 SP4,SQL Server 2008 R2 RTM和SQL Server 2012 SP3。
這將表明您正在將Assembly添加到'master'數據庫。它是否正確? – 2011-05-31 16:02:55
您是否使用sysadmin角色的成員登錄? – a1ex07 2011-05-31 16:16:05
@尼爾·奈特:這是問題所在,我不知道爲什麼它說「數據庫'主''。我有'USE [mydatabase]',因爲我試圖將程序集插入'mydatabase' – MStodd 2011-05-31 17:46:14