Как зарегистрировать Систему. DirectoryServices для использования в SQL Функции пользователя CLR?

Я портирую старые 32-bit COM компонент, который был записан в VB6 в целях чтения и записи в Active Directory сервер. Новое решение будет в C# и будет использовать SQL CLR функции пользователя.

Блок, к которому я пытаюсь развернуться SQL Server содержит ссылку на System.DirectoryServices. Проект действительно компилирует без любых ошибок, но я не могу развернуть блок на SQL Server из-за следующей ошибки:

Error: Assembly 'system.directoryservices, version=2.0.0.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a.' was not found in the SQL catalog.

Что является корректными шагами для регистрации System.DirectoryServices на SQL Server?

13
задан gotqn 25 March 2015 в 08:55
поделиться

3 ответа

Информация, полученная из других ответов, привела меня к решению. Вот шаги, которые я придумал для дальнейшего использования:

CREATE ASSEMBLY [System.DirectoryServices]
FROM 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.DirectoryServices.dll'
WITH PERMISSION_SET = UNSAFE
GO

В первый раз, когда я запустил вышеприведенный оператор, я получил следующую ошибку:

CREATE ASSEMBLY для сборки 'System.DirectoryServices' failed because assembly 'System.DirectoryServices' is not authorized for PERMISSION_SET = UNSAFE. Сборка авторизована, если верно одно из следующих условий: владелец базы данных (DBO) имеет разрешение UNSAFE ASSEMBLY и база данных имеет свойство базы данных TRUSTWORTHY; или сборка подписана сертификатом или асимметричным ключом, который имеет соответствующий логин с разрешением UNSAFE ASSEMBLY.

Для того чтобы оператор CREATE ASSEMBLY выполнился без ошибок, мне пришлось сначала включить TRUSTWORTHY следующим образом:

ALTER DATABASE DatabaseName SET TRUSTWORTHY ON
GO

После включения TRUSTWORTHY команда выполнилась без ошибок, но выдала следующее пугающее предупреждение:

Warning: Регистрируемая вами сборка Microsoft .NET Framework 'system.directoryservices, version=2.0.0.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a, processorarchitecture=msil.' не полностью протестирована в размещенной среде SQL Server и не поддерживается. В будущем, если вы обновите или обслужите эту сборку или .NET Framework, ваша процедура интеграции CLR может перестать работать. Для получения более подробной информации обратитесь к SQL Server Books Online.

После того как System.DirectoryServices должным образом зарегистрирована в SQL Server, я могу развернуть/регистрировать зависимую пользовательскую сборку SQL CLR без каких-либо проблем.

7
ответ дан 2 December 2019 в 00:45
поделиться

Помогает ли это: Создание сборки в SQL Server ?

Честно говоря, я мало знаю об использовании SQL Server CLR. Так что, если это поможет, я буду придерживаться этого, чтобы научиться самому. =)

РЕДАКТИРОВАТЬ №1

Вот еще одна интересная ссылка на эту тему.

Проблемы интеграции SQL Server 2005 со средой CLR и регистрации сборки

Надеюсь, это поможет!

0
ответ дан 2 December 2019 в 00:45
поделиться

Эта статья здесь помогает ??

Новый "одобрено SQLCLR "сборка в SP1

Часто спрашивают про набор базы сборки библиотеки классов, которые могут быть безопасно использовать в SQLCLR. Обычно это принимает форму "могу ли я использовать сборку System.XYZ.dll в процедурном SQLCLR код »или« почему я получаю »сборку System.XYZ.dll не найден ", когда я попробуйте каталогизировать мою собственную сборку, которая называет это? Тот, кто слышит чаще всего упоминается System.DirectoryServices.dll (Активный Справочная поддержка) или System.Management.dll (поддержка WMI) или System.Remoting.dll и др. Единственный способ их использования - запустить CREATE СБОРНИТЕ их самостоятельно, которые предполагает использование PERMISSION_SET = НЕ БЕЗОПАСНО. И каталогизируя все зависимости. Не для слабонервных сердце.

Также - SQL Server CLR не поддерживает все мыслимые сборки - списки здесь:

Одно примечание из второй статьи MSDN :

Неподдерживаемые библиотеки

Неподдерживаемые библиотеки все еще можно вызывать из ваших управляемых хранимых процедур, триггеры, определяемые пользователем функции, определяемые пользователем типы и определяемые пользователем агрегаты. Неподдерживаемая библиотека должна быть сначала зарегистрирована в базе данных SQL Server, с помощью оператора CREATE ASSEMBLY, прежде чем его можно будет использовать в вашем коде.Любая неподдерживаемая библиотека, зарегистрированная и запущенная на сервере, должна быть проверены и протестированы на безопасность и надежность.

Например, пространство имен System.DirectoryServices не поддерживается . Вы должны зарегистрировать сборку System.DirectoryServices.dll в UNSAFE. разрешения, прежде чем вы сможете вызвать его из своего кода. НЕБЕЗОПАСНОЕ разрешение необходимо, потому что классы в пространстве имен System.DirectoryServices не соответствуют требованиям SAFE или EXTERNAL_ACCESS. Для большего информацию см. в разделе Ограничения модели программирования интеграции со средой CLR и Безопасность доступа к интеграционному коду CLR.

6
ответ дан 2 December 2019 в 00:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: