Создание сборки
Область применения:SQL Server
Управляемые объекты базы данных, например хранимые процедуры или триггеры, компилируются и развертываются в единицах, называемых сборками. Управляемые сборки 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 SQL Server SQL Server также создает сборки, на которые ссылается сборка корневого уровня, если указанные сборки еще не созданы в базе данных.
Пользователям базы данных или ролям пользователей предоставляются разрешения на создание и, следовательно, собственные сборки в базе данных. Чтобы создать сборки, пользователь или роль базы данных должны иметь разрешение CREATE ASSEMBLY
.
Сборка может успешно ссылаться на другие сборки только при следующих условиях.
- Сборка, которая называется или ссылается на нее, принадлежит тому же пользователю или роли.
- Сборка, которая называется или ссылается, была создана в той же базе данных.
Указание безопасности при создании сборок
При создании сборки в базе данных SQL Server можно указать один из трех различных уровней безопасности, в которых код может выполняться: SAFE
, EXTERNAL_ACCESS
или UNSAFE
. При запуске инструкции CREATE ASSEMBLY
некоторые проверки выполняются в сборке кода, что может привести к сбою регистрации сборки на сервере.
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 Win32.
Чтобы создать сборку EXTERNAL_ACCESS
или UNSAFE
в SQL Server, необходимо выполнить одно из следующих двух условий:
Сборка должна иметь строгое имя, подписанное обычной подписью или кодом Authenticode с сертификатом. Это строгое имя (или сертификат) создается внутри SQL Server как асимметричный ключ (или сертификат) и имеет соответствующее имя входа с разрешением
EXTERNAL ACCESS ASSEMBLY
(для сборок внешнего доступа) илиUNSAFE ASSEMBLY
разрешения (для небезопасных сборок).Владелец базы данных (DBO) имеет
EXTERNAL ACCESS ASSEMBLY
(для сборокEXTERNAL ACCESS
) илиUNSAFE ASSEMBLY
(для сборокUNSAFE
) и у базы данных есть свойство TRUSTWORTHY базы данных значениеON
.
Перечисленные ранее условия также проверяются во время загрузки сборки (включая выполнение). Чтобы загрузить сборку, должно выполняться хотя бы одно условие.
Рекомендуется, чтобы свойство базы данных TRUSTWORTHY в базе данных не ON
только для выполнения кода среды CLR в процессе сервера. Вместо этого рекомендуется создать асимметричный ключ из файла сборки в базе данных master
. Затем необходимо создать имя входа, сопоставленное с этим асимметричным ключом, и имя входа должно быть предоставлено EXTERNAL ACCESS ASSEMBLY
или UNSAFE ASSEMBLY
разрешения.
Следующие инструкции Transact-SQL выполняют действия, необходимые для создания асимметричного ключа, сопоставления имени входа с этим ключом, а затем предоставления EXTERNAL_ACCESS
разрешения для входа. Перед выполнением инструкции CREATE ASSEMBLY
необходимо выполнить следующие инструкции Transact-SQL.
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 выполняют действия, необходимые для создания асимметричного ключа, сопоставления имени входа с этим ключом, а затем предоставления UNSAFE
разрешения для входа. Перед выполнением инструкции CREATE ASSEMBLY
необходимо выполнить следующие инструкции Transact-SQL.
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