Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Управляемые объекты базы данных, например хранимые процедуры или триггеры, компилируются и развертываются в единицах, называемых сборками. Управляемые сборки DLL должны быть зарегистрированы в SQL Server до использования функциональных возможностей сборки. Чтобы зарегистрировать сборку в базе данных SQL Server, используйте инструкцию CREATE ASSEMBLY. В этом разделе описывается регистрация сборки в базе данных с помощью инструкции CREATE ASSEMBLY и указание параметров безопасности для сборки.
Инструкция CREATE ASSEMBLY
Инструкция CREATE ASSEMBLY используется для создания сборки в базе данных. Ниже приведен пример:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll';
Предложение FROM задает имя пути создаваемой сборки. Путь может указываться в формате UNC или быть локальным физическим путем к файлу.
SQL Server не позволяет регистрировать разные версии сборки с одинаковым именем, языком и языком и открытым ключом.
Можно создать сборки, ссылающиеся на другие сборки. При создании сборки в SQL Server также создаются сборки, на которые ссылается сборка корневого уровня, если указанные сборки еще не созданы в базе данных.
Пользователям базы данных или ролям пользователей предоставляются разрешения на создание и тем самым собственные сборки в базе данных. Чтобы создать сборки, пользователь или роль базы данных должны иметь разрешение CREATE ASSEMBLY.
Сборка может успешно ссылаться на другие сборки только при следующих условиях.
Сборка, которая называется или ссылается на нее, принадлежит одному или тому же пользователю или роли.
Сборка, которая вызывается или ссылается на нее, создается в той же базе данных.
Указание безопасности при создании сборок
При создании сборки в базе данных SQL Server можно указать один из трех различных уровней безопасности, в которых код может выполняться: SAFE
, EXTERNAL_ACCESS
или UNSAFE
.
CREATE ASSEMBLY
При выполнении инструкции некоторые проверки выполняются в сборке кода, что может привести к сбою регистрации сборки на сервере. Дополнительные сведения см. в примере олицетворения в CodePlex.
SAFE
— это набор разрешений по умолчанию и работает для большинства сценариев. Чтобы указать заданный уровень безопасности, измените синтаксис инструкции CREATE ASSEMBLY следующим образом:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll'
WITH PERMISSION_SET = SAFE;
Кроме того, можно создать сборку с SAFE
набором разрешений, просто опустив третью строку приведенного выше кода:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll';
Если код в сборке выполняется в наборе разрешений SAFE
, он может выполнять только вычисления и доступ к данным на сервере через управляемый поставщик в процессе.
Создание сборок EXTERNAL_ACCESS и UNSAFE
EXTERNAL_ACCESS
обращается к сценариям, в которых код должен получить доступ к ресурсам за пределами сервера, таким как файлы, сеть, реестр и переменные среды. Каждый раз, когда сервер получает доступ к внешним ресурсам, он олицетворяет контекст безопасности пользователя, вызывающего управляемый код.
UNSAFE
Разрешение кода предназначено для тех ситуаций, в которых сборка не является надежной или требует дополнительного доступа к ограниченным ресурсам, например API Microsoft Win32.
Чтобы создать сборку EXTERNAL_ACCESS
или UNSAFE
в SQL Server, необходимо выполнить одно из следующих двух условий:
Сборка должна иметь строгое имя, подписанное обычной подписью или кодом Authenticode с сертификатом. Это строгое имя (или сертификат) создается внутри SQL Server как асимметричный ключ (или сертификат) и имеет соответствующее имя входа с разрешением
EXTERNAL ACCESS ASSEMBLY
(для сборок внешнего доступа) илиUNSAFE ASSEMBLY
разрешения (для небезопасных сборок).Владелец базы данных (DBO) имеет
EXTERNAL ACCESS ASSEMBLY
разрешение (для сборок) илиUNSAFE ASSEMBLY
(дляEXTERNAL ACCESS
UNSAFE
сборок), а в базе данных задано свойствоON
DATABASE TRUSTWORTHY.
Перечисленные выше условия также проверяются во время загрузки сборки (включая выполнение). Чтобы загрузить сборку, должно выполняться хотя бы одно условие.
Рекомендуется, чтобы свойство БАЗЫ данных TRUSTWORTHY в базе данных не было задано ON
только для выполнения кода среды CLR в процессе сервера. Вместо этого рекомендуется создать асимметричный ключ из файла сборки в базе данных master. Затем необходимо создать имя входа, сопоставленное с этим асимметричным ключом, и имя входа должно быть предоставлено EXTERNAL ACCESS ASSEMBLY
или UNSAFE ASSEMBLY
разрешения.
Следующие Transact-SQL инструкции перед запуском инструкции CREATE ASSEMBLY.
USE master;
GO
CREATE ASYMMETRIC KEY SQLCLRTestKey FROM EXECUTABLE FILE = 'C:\MyDBApp\SQLCLRTest.dll'
CREATE LOGIN SQLCLRTestLogin FROM ASYMMETRIC KEY SQLCLRTestKey
GRANT EXTERNAL ACCESS ASSEMBLY TO SQLCLRTestLogin;
GO
Замечание
Необходимо создать новое имя входа для сопоставления с асимметричным ключом. Это имя входа используется только для предоставления разрешений; он не должен быть связан с пользователем или использоваться в приложении.
Чтобы создать сборку EXTERNAL ACCESS
, создатель должен иметь EXTERNAL ACCESS
разрешение. Это указано при создании сборки:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS;
Следующие Transact-SQL инструкции перед запуском инструкции CREATE ASSEMBLY.
USE master;
GO
CREATE ASYMMETRIC KEY SQLCLRTestKey FROM EXECUTABLE FILE = 'C:\MyDBApp\SQLCLRTest.dll';
CREATE LOGIN SQLCLRTestLogin FROM ASYMMETRIC KEY SQLCLRTestKey ;
GRANT UNSAFE ASSEMBLY TO SQLCLRTestLogin ;
GO
Чтобы указать, что сборка загружается с разрешением UNSAFE
, необходимо указать набор разрешений UNSAFE
при загрузке сборки на сервер:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll'
WITH PERMISSION_SET = UNSAFE;
Дополнительные сведения о разрешениях для каждого из параметров см. в разделе "Безопасность интеграции СРЕДЫ CLR".
См. также
Управление сборками интеграции CLR
Изменение сборки
Удаление сборки
Безопасность доступа к коду интеграции CLR
СВОЙСТВО БАЗЫ ДАННЫХ TRUSTWORTHY
Разрешение частично доверенных вызывающих абонентов