ПОЖАЛУЙСТА, сделайте , а не добавьте логин к фиксированной серверной роли sysadmin
, чтобы обойти эту ошибку. Это абсолютно не нужно!
Принятый ответ неверен не потому, что он не работает (он работает), а потому, что нет необходимости предоставлять ПОЛНЫЙ КОНТРОЛЬ ЗА ВСЕМ МОМЕНТОМ для входа в систему только для того, чтобы сделать что-то, для чего есть определенное разрешение. Вы не станете входить в систему Windows в качестве администратора домена исключительно для того, чтобы дать им разрешение на удаление определенного ресурса или папки.
Для ясности, это не вина автора, поскольку они правильно цитировали документацию MSDN. Проблема в том, что документация MSDN для CREATE ASSEMBLY
была неверной. К сожалению, в документации для SQL Server 2008 R2 указано, что имя входа должно быть в роли сервера sysadmin
. Однако с тех пор было исправлено , чтобы заявить:
Если указано PERMISSION_SET = UNSAFE, требуется разрешение UNSAFE ASSEMBLY на сервере.
Это разрешение, UNSAFE ASSEMBLY
, является точным разрешением, указанным в сообщении об ошибке:
Отказано в разрешении UNSAFE ASSEMBLY для объекта «сервер», база данных «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 с пакетом обновления 4 (SP4), SQL Server 2008 R2 RTM и SQL Server 2012 с пакетом обновления 3 (SP3).