Управление доступом для кода на основе интеграции со средой CLR

Применимо к:SQL Server

Среда CLR поддерживает модель безопасности, называемую управлением доступом для кода. В этой модели разрешения предоставляются сборкам на основе идентификатора кода. Дополнительные сведения см. в разделе «Управление доступом для кода» справочной документации пакета средств разработки программного обеспечения .NET Framework.

Политика безопасности, которая регламентирует разрешения, предоставляемые сборкам, определяется в трех разных местах.

  • Политика компьютера: это политика, которая действует для всего управляемого кода, работающего на компьютере, на котором установлен SQL Server.

  • Политика пользователя: это политика, действимая для управляемого кода, размещенного процессом. Для SQL Server политика пользователя зависит от учетной записи Windows, в которой выполняется служба SQL Server.

  • Политика узла: это политика, настроенная узлом среды CLR (в данном случае SQL Server), которая действует для управляемого кода, работающего в этом узле.

Механизм управления доступом к коду, поддерживаемый средой CLR, основан на предположении, что в среде времени выполнения может размещаться код, доверенный полностью или частично. Ресурсы, защищенные безопасностью доступа к коду CLR, обычно упаковываются в интерфейсы программирования управляемых приложений, которые требуют соответствующего разрешения, прежде чем разрешать доступ к ресурсу. Требование разрешения удовлетворяется только в том случае, если все вызывающие элементы (на уровне сборки) в стеке вызовов обладают соответствующими ресурсными разрешениями.

Набор разрешений безопасности доступа к коду, предоставляемых управляемому коду при выполнении внутри SQL Server, является пересечением набора разрешений, предоставленных указанным выше тремя уровнями политики. Даже если SQL Server предоставляет набор разрешений для сборки, загруженной в SQL Server, конечный набор разрешений, предоставленных пользовательскому коду, может быть ограничен политиками уровня пользователя и компьютера.

Наборы разрешений на уровне политики узла SQL Server

Набор разрешений безопасности доступа к коду, предоставленных сборкам уровня политики узла SQL Server, определяется набором разрешений, указанным при создании сборки. Существует три набора разрешений: SAFE, EXTERNAL_ACCESS и UNSAFE (указанные с помощью PERMISSION_SET параметра CREATE ASSE МБ LY (Transact-SQL)).

SQL Server предоставляет уровень политики безопасности уровня узла среде CLR при его размещении; Эта политика является дополнительным уровнем политики ниже двух уровней политики, которые всегда применяются. Эта политика устанавливается для каждого домена приложения, созданного SQL Server. Эта политика не предназначена для домена приложения по умолчанию, который будет применяться при создании экземпляра СРЕДЫ CLR SQL Server.

Политика уровня узла SQL Server — это сочетание фиксированной политики SQL Server для системных сборок и пользовательской политики для пользовательских сборок.

Исправленная политика для сборок СРЕДЫ CLR и системных сборок SQL Server предоставляет им полное доверие.

Указанная пользователем часть политики узла SQL Server основана на владельце сборки, указывающей один из трех контейнеров разрешений для каждой сборки. Дополнительные сведения о правах доступа, перечисленных ниже, см. в документации пакета SDK для платформы .NET Framework.

SAFE

Разрешаются только внутренние вычисления и локальный доступ к данным. SAFE является самым строгим набором разрешений. Код, выполняемый сборкой с разрешениями SAFE , не может получить доступ к ресурсам внешней системы, таким как файлы, сети, переменные среды или реестр.

Сборки SAFE имеют следующие разрешения и значения:

Разрешение Значения и описание
SecurityPermission Выполнение: разрешение на выполнение управляемого кода.
SqlClientPermission Контекстное подключение = true, контекстное подключение = да: можно использовать только контекст-соединение, а строка подключения может указывать только значение "context connection=true" или "context connection=yes".

AllowBlankPassword = false: пустые пароли не разрешены.

EXTERNAL_ACCESS

EXTERNAL_ACCESS сборки имеют те же разрешения , что и сборки SAFE , с дополнительной возможностью доступа к ресурсам внешней системы, таким как файлы, сети, переменные среды и реестр.

EXTERNAL_ACCESS сборки также имеют следующие разрешения и значения:

Разрешение Значения и описание
DistributedTransactionPermission Неограниченные: разрешены распределенные транзакции.
DNSPermission Неограниченный : разрешение на запрос сведений с серверов доменных имен.
EnvironmentPermission Неограниченный доступ: разрешен полный доступ к переменным системы и пользовательской среды.
EventLogPermission Администратор ister: Разрешены следующие действия: создание источника событий, чтение существующих журналов, удаление источников событий или журналов, реагирование на записи, очистка журнала событий, прослушивание событий и доступ к коллекции всех журналов событий.
FileIOPermission Неограниченный доступ: разрешен полный доступ к файлам и папкам.
KeyContainerPermission Неограниченный доступ: разрешен полный доступ к контейнерам ключей.
NetworkInformationPermission Доступ: разрешено pinging.
RegistryPermission Позволяет HKEY_CLASSES_ROOT, HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER, HKEY_CURRENT_CONFIG и HKEY_USERS.
SecurityPermission Утверждение: возможность утверждать, что все вызывающие данные этого кода имеют необходимое разрешение для операции.

ControlPrincipal: возможность управления основным объектом.

Выполнение: разрешение на выполнение управляемого кода.

SerializationFormatter: возможность предоставления служб сериализации.
SmtpPermission Доступ. Разрешены исходящие подключения к порту узла SMTP 25.
SocketPermission Подключение: Разрешены исходящие подключения (все порты, все протоколы) на адресе транспорта.
SqlClientPermission Неограниченный доступ: разрешен полный доступ к источнику данных.
StorePermission Неограниченный доступ: разрешен полный доступ к хранилищам сертификатов X.509.
WebPermission Подключение: Разрешены исходящие подключения к веб-ресурсам.

UNSAFE

UNSAFE позволяет сборкам неограниченный доступ к ресурсам как внутри, так и за пределами SQL Server. Код, выполняемый из сборки UNSAFE, также может вызывать неуправляемый код.

Сборки UNSAFE предоставляются FullTrust.

SAFE — это рекомендуемый параметр разрешения для сборок, выполняющих задачи вычисления и управления данными без доступа к ресурсам за пределами SQL Server.

EXTERNAL_ACCESS рекомендуется для сборок, обращаюющихся к ресурсам за пределами SQL Server. EXTERNAL_ACCESS сборки по умолчанию выполняются как учетная запись службы SQL Server. Для EXTERNAL_ACCESS кода можно явно олицетворить контекст безопасности проверки подлинности Windows вызывающей стороны. Так как по умолчанию используется учетная запись службы SQL Server, разрешение на выполнение EXTERNAL_ACCESS должно быть предоставлено только именам входа, доверенным для запуска от имени учетной записи службы.

С точки зрения безопасности сборки EXTERNAL_ACCESS и UNSAFE идентичны. Однако EXTERNAL_ACCESS сборки обеспечивают различные защиты надежности и надежности, которые не находятся в сборках UNSAFE.

Указание UNSAFE позволяет коду в сборке выполнять незаконные операции с пространством процессов SQL Server, поэтому может компрометировать надежность и масштабируемость SQL Server. Дополнительные сведения о создании сборок СРЕДЫ CLR в SQL Server см. в разделе "Управление сборками интеграции CLR".

Важно!

SQL Server содержит сборки CLR, которые ядро СУБД использует для предоставления определенных функций. Сборка Microsoft.SQLServer.Types , включенная в установку SQL Server, отображается в метаданных как сборка UNSAFE . Это сделано намеренно. Эти сборки считаются доверенными и безопасными по умолчанию.

Доступ к внешним ресурсам

Если определяемый пользователем тип (UDT), хранимая процедура или другая сборка конструктора зарегистрирована в наборе разрешений SAFE , то управляемый код, выполняемый в конструкции, не может получить доступ к внешним ресурсам. Однако если заданы наборы разрешений EXTERNAL_ACCESS или UNSAFE , а управляемый код пытается получить доступ к внешним ресурсам, SQL Server применяет следующие правила:

If Следующее действие
Контекст выполнения соответствует имени входа SQL Server. Попытки получить доступ к внешним ресурсам отклоняются, и активизируется исключение безопасности.
Контекст выполнения соответствует имени входа Windows, и контекстом выполнения является первоначальный вызывающий объект. Доступ к внешнему ресурсу осуществляется в контексте безопасности учетной записи службы SQL Server.
Вызывающий объект не является первоначальным вызывающим объектом. Доступ запрещается, и активизируется исключение безопасности.
Контекст выполнения соответствует имени входа Windows, контекст выполнения является исходным вызывающим объектом, а к вызывающему объекту применяется олицетворение. При доступе используется контекст безопасности вызывающего объекта, а не учетная запись службы.

Сводные данные о наборе разрешений

На следующей диаграмме приведены ограничения и разрешения, предоставленные наборам разрешений SAFE, EXTERNAL_ACCESS и UNSAFE .

Функция БЕЗОПАСНОГО EXTERNAL_ACCESS НЕБЕЗОПАСНЫХ
Разрешения безопасности доступа к коду Только выполнение Выполнение и доступ к внешним ресурсам Неограниченное (включая P/Invoke)
Ограничения модели программирования Да Да Без ограничений
Требование к проверяемости Да Да Нет
Локальный доступ к данным Да Да Да
Возможность вызова машинного кода No No Да

См. также

Безопасность интеграции со средой CLR
Атрибуты защиты узла и программирование интеграции со средой CLR
Ограничения модели программирования на основе интеграции со средой CLR
Среда размещения CLR