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