Управление доступом для кода на основе интеграции со средой CLR
Среда CLR поддерживает модель безопасности, называемую управлением доступом для кода. В этой модели разрешения предоставляются сборкам на основе идентификатора кода. Дополнительные сведения см. в разделе «Управление доступом для кода» справочной документации пакета средств разработки программного обеспечения .NET Framework.
Политика безопасности, которая регламентирует разрешения, предоставляемые сборкам, определяется в трех разных местах.
Политика для компьютера: распространяется на весь управляемый код, выполняемый на компьютере, на котором установлен SQL Server.
Политика для пользователя: распространяется на весь управляемый код, выполняемый в рамках процесса. Для SQL Server применяемая политика пользователя зависит от учетной записи Windows, от имени которой работает служба SQL Server.
Политика для узла: устанавливается узлом CLR (в данном случае SQL Server) и распространяется на управляемый код, выполняемый на узле.
Механизм управления доступом к коду, поддерживаемый средой CLR, основан на предположении, что в среде времени выполнения может размещаться код, доверенный полностью или частично. Ресурсы, защищаемые механизмом защиты доступа к коду платформы .NET Framework, обычно окружены оболочкой API-интерфейсов управляемого кода, которые предоставляютдоступ к ресурсу только после получения соответствующего разрешения. Требование на предоставление разрешенияудовлетворяется только в том случае, если все вызывающие элементы (на уровне сборки) в стеке вызовов обладают соответствующими разрешениями на ресурсы.
Набор разрешений CAS, которые предоставляются управляемому коду при его выполнении в SQL Server, является пересечением наборов разрешений, предоставляемых на трех указанных уровнях политики. Даже если SQL Server предоставляет ряд разрешений сборке, загруженной в SQL Server, в конечном итоге набор разрешений, которые предоставлены пользовательскому коду, может быть подвергнут дальнейшему сокращению с учетом политик, заданных на уровне пользователя и компьютера.
Наборы разрешений на уровне политики узла SQL Server
Набор разрешений CAS, который предоставляется определяемым пользователем сборкам на уровне политики узла SQL Server, определяется набором разрешений, заданным при создании сборки. Предусмотрены следующие три набора разрешений: SAFE, EXTERNAL_ACCESS и UNSAFE (указываются с помощью параметра PERMISSION_SET инструкции CREATE ASSEMBLY (Transact-SQL)).
Среде CLR, размещенной в SQL Server, предоставляется уровень политики безопасности на уровне сервера; данная политика представляет собой дополнительный уровень политики, расположенный ниже двух всегда действующих уровней политики. Данная политика задается для каждого домена приложений, создаваемого службами SQL Server. Эта политика не предназначена для домена приложения по умолчанию, который применяется при создании в SQL Server экземпляра среды CLR.
Политика 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: разрешается запрашивать информацию с серверов DNS. |
EnvironmentPermission |
Unrestricted: разрешается полный доступ к системным и пользовательским переменным среды. |
EventLogPermission |
Administer: разрешаются следующие действия: создание источника событий, чтение существующих журналов, удаление источников событий или журналов, формирование ответов на записи, очистка журнала событий, прослушивание событий и доступ к коллекции всех журналов событий. |
FileIOPermission |
Unrestricted: разрешен полный доступ к файлам и папкам. |
KeyContainerPermission |
Unrestricted: разрешен полный доступ к ключевым контейнерам. |
NetworkInformationPermission |
Access: разрешено выполнять команду ping. |
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. |
Доступ к внешним ресурсам
Если сборка с определяемыми пользователем типами (UDT), хранимыми процедурами или конструкциями другого типа зарегистрирована с набором разрешений SAFE, то управляемый код, который выполняется в конструкции, не способен получить доступ к внешним ресурсам. Но если задан набор разрешений EXTERNAL_ACCESS или UNSAFE и в управляемом коде предпринимается попытка получить доступ к внешним ресурсам, то в SQL Server применяются следующие правила.
Если |
То |
---|---|
Контекст выполнения соответствует имени входа SQL Server. |
Попытки получить доступ к внешним ресурсам отклоняются, и активизируется исключение безопасности. |
Контекст выполнения соответствует имени входа Windows, и контекстом выполнения является первоначальный вызывающий объект. |
Доступ к внешнему ресурсу предоставляется в контексте безопасности учетной записи SQL Server. |
Вызывающий объект не является первоначальным вызывающим объектом. |
Доступ запрещается, и активизируется исключение безопасности. |
Контекст выполнения соответствует имени входа Windows, контекст выполнения является исходным вызывающим объектом, а к вызывающему объекту применяется олицетворение. |
При доступе используется контекст безопасности вызывающего объекта, а не учетная запись службы. |
Сводные данные о наборе разрешений
На следующей диаграмме показаны ограничения и разрешения, предоставленные наборам разрешений SAFE, EXTERNAL_ACCESS и UNSAFE.
SAFE |
EXTERNAL_ACCESS |
UNSAFE |
|
Code Access Security Permissions |
Только выполнение |
Выполнение и доступ к внешним ресурсам |
Неограниченное (включая P/Invoke) |
Programming model restrictions |
Да |
Да |
Без ограничений |
Verifiability requirement |
Да |
Да |
Нет |
Local data access |
Да |
Да |
Да |
Ability to call native code |
Нет |
Нет |
Да |
См. также
Основные понятия
Безопасность интеграции со средой CLR
Атрибуты защиты узла и программирование средств интеграции со средой CLR
Ограничения модели программирования на основе интеграции со средой CLR