Поделиться через


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

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

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

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

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

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

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

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

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

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

SQL Server. Она не предназначена для домена приложений по умолчанию, который применялся бы при создании в SQL Server экземпляра среды CLR.

В SQL Server fixedpolicy для системных сборок и определяемая пользователем политика для пользовательских сборок.

Фиксированная политика для сборок 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: разрешено выполнять команду 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 должно быть предоставлено только именам входам, которым доверяет выполнение в качестве учетной записи службы. С точки зрения безопасности сборки EXTERNAL_ACCESS и UNSAFE являются идентичными. Но сборки EXTERNAL_ACCESS предоставляют различные средства защиты, обладающие надежностью и прочностью, которые не предусмотрены в сборках UNSAFE. Указание UNSAFE позволяет коду в сборке выполнять недопустимые операции с SQL Server. Дополнительные сведения о создании сборок CLR в SQL Server см. в разделе Управление сборками интеграции CLR.

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

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

If Следующее действие
Контекст выполнения соответствует имени входа 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
Среда размещения CLR