Как зарегистрировать System.DirectoryServices для использования в пользовательских функциях SQL CLR? - PullRequest
13 голосов
/ 02 июня 2010

Я портирую старый компонент 3 2-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?

Ответы [ 4 ]

7 голосов
/ 02 июня 2010

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

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

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

СОЗДАТЬ СБОРКУ для сборки «System.DirectoryServices» не удалось, поскольку сборка «System.DirectoryServices» не авторизована для PERMISSION_SET = UNSAFE. Сборка авторизуется, если выполняется одно из следующих условий: владелец базы данных (DBO) имеет разрешение UNSAFE ASSEMBLY, а база данных имеет свойство базы данных TRUSTWORTHY; или сборка подписана сертификатом или асимметричным ключом с соответствующим логином с разрешением UNSAFE ASSEMBLY.

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

ALTER DATABASE DatabaseName SET TRUSTWORTHY ON
GO

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

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

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

5 голосов
/ 02 июня 2010

Помогает ли эта статья здесь?

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

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

Кроме того, SQL Server CLR не поддерживает все мыслимые сборки. Список можно найти здесь:

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

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

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

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

0 голосов
/ 01 июня 2015

Хотелось бы добавить, что я провел день, пытаясь зарегистрировать сборку, используя DLL-библиотеку с асимметричным ключом, которая выдает ошибку.

. , , не авторизован для PERMISSION_SET = UNSAFE. Сборка разрешена, когда. , .

CREATE ASYMMETRIC KEY AsyKeyName FROM executable FILE = 'C:\Program Files\...'

Позже только для того, чтобы узнать, что SQL-серверу не нравятся пути с пробелами между !!

0 голосов
/ 02 июня 2010

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

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

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

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

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

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

...