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


Управление доступом для кода на основе интеграции со средой 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

Набор разрешений управления доступом для кода, который предоставляется сборкам на уровне политики узла 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

Нет

Нет

Да