Безопасность доступа к коду интеграции CLR
Область применения:SQL Server
Среда CLR поддерживает модель безопасности, называемую управлением доступом для кода. В этой модели разрешения предоставляются сборкам на основе идентификатора кода. Дополнительные сведения см. в безопасности доступа к коду.
Политика безопасности, которая регламентирует разрешения, предоставляемые сборкам, определяется в трех разных местах.
политика компьютера. Эта политика действует для всего управляемого кода, работающего на компьютере, на котором установлен 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 ASSEMBLY).
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 |
Execution : разрешение на выполнение управляемого кода. |
SqlClientPermission |
Context connection = true , context connection = yes : можно использовать только контекст-соединение, а строка подключения может указывать только значение context connection=true или context connection=yes .AllowBlankPassword = false : пустые пароли не разрешены. |
EXTERNAL_ACCESS
EXTERNAL_ACCESS
сборки имеют те же разрешения, что и сборки SAFE
, с дополнительной возможностью доступа к внешним ресурсам системы, таким как файлы, сети, переменные среды и реестр.
EXTERNAL_ACCESS
сборки также имеют следующие разрешения и значения:
Разрешение | Значения и описание |
---|---|
DistributedTransactionPermission |
Unrestricted : разрешены распределенные транзакции. |
DNSPermission |
Unrestricted : разрешение на запрос сведений с серверов доменных имен. |
EnvironmentPermission |
Unrestricted : разрешен полный доступ к переменным системы и пользовательской среды. |
EventLogPermission |
Administer : разрешены следующие действия: создание источника событий, чтение существующих журналов, удаление источников событий или журналов, реагирование на записи, очистка журнала событий, прослушивание событий и доступ к коллекции всех журналов событий. |
FileIOPermission |
Unrestricted : разрешен полный доступ к файлам и папкам. |
KeyContainerPermission |
Unrestricted : разрешен полный доступ к контейнерам ключей. |
NetworkInformationPermission |
Access : разрешена проверка pinging. |
RegistryPermission |
Позволяет HKEY_CLASSES_ROOT , HKEY_LOCAL_MACHINE , HKEY_CURRENT_USER , HKEY_CURRENT_CONFIG и HKEY_USERS. |
SecurityPermission |
Assertion . Возможность утверждать, что все вызывающие данные этого кода имеют необходимое разрешение для операции.ControlPrincipal : возможность управления основным объектом.Execution : разрешение на выполнение управляемого кода.SerializationFormatter . Возможность предоставления служб сериализации. |
SmtpPermission |
Access : разрешены исходящие подключения к порту узла SMTP 25. |
SocketPermission |
Connect : разрешены исходящие подключения (все порты, все протоколы) на адресе транспорта. |
SqlClientPermission |
Unrestricted : разрешен полный доступ к источнику данных. |
StorePermission |
Unrestricted : разрешен полный доступ к хранилищам сертификатов X.509. |
WebPermission |
Connect : разрешены исходящие подключения к веб-ресурсам. |
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, а контекст выполнения — исходный вызывающий объект, и вызывающий объект олицетворен. | Access использует контекст безопасности вызывающего объекта, а не учетную запись службы. |
Сводка набора разрешений
На следующей диаграмме перечислены ограничения и разрешения, предоставленные SAFE
, EXTERNAL_ACCESS
и наборы разрешений UNSAFE
.
Функция | SAFE |
EXTERNAL_ACCESS |
UNSAFE |
---|---|---|---|
Разрешения безопасности доступа к коду | Только выполнение | Выполнение и доступ к внешним ресурсам | Неограниченное (включая P/Invoke) |
Ограничения модели программирования | Да | Да | Без ограничений |
Требование к проверяемости | Да | Да | Нет |
Локальный доступ к данным | Да | Да | Да |
Возможность вызова машинного кода | Нет | Нет | Да |