Невозможно добавить сборку SQLCLR в базу данных, сообщение 300 - PullRequest
7 голосов
/ 31 мая 2011

У меня проблемы с добавлением сборки 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, уровень 14, состояние 1, строка 3
Отказано в разрешении UNSAFE ASSEMBLY для объекта 'сервер', базы данных 'master'.

Мысли

Ответы [ 3 ]

5 голосов
/ 06 июля 2016

ПОЖАЛУЙСТА, сделайте , а не добавьте логин к фиксированной серверной роли 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).

2 голосов
/ 31 мая 2011

Я думаю, что у вас есть проблема, потому что логин не является членом sysadmin. MSDN говорит: «Если указано PERMISSION_SET = UNSAFE, требуется членство в предопределенной роли сервера sysadmin»

Обновление

Как было упомянуто в комментарии, это можно и нужно делать, не назначая логины роли sysadmin. К сожалению, я не могу удалить этот ответ, поскольку он принят, поэтому в случае, если у кого-то еще есть SQLServer 2008, я рекомендую обратиться к http://stackoverflow.com/a/38213540/577765, в котором есть подробное объяснение

0 голосов
/ 02 апреля 2015

Вы изменили свойства базы данных, чтобы установить достоверность?

ALTER DATABASE Имя базы данных SET TRUSTWORTHY ON;

Из BOL, поскольку база данных, подключенная к экземпляру SQL Server, не может быть немедленнодоверенный, базе данных не разрешен доступ к ресурсам, выходящим за рамки базы данных, пока база данных не будет явно помечена как заслуживающая доверия.Кроме того, модули, предназначенные для доступа к ресурсам за пределами базы данных, и сборки с настройками разрешений EXTERNAL_ACCESS и UNSAFE, предъявляют дополнительные требования для успешной работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...