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


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

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

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

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

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

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

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

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

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

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

SQL Server. Эта политика не предназначена для домена приложения по умолчанию, который будет применяться при создании экземпляра СРЕДЫ CLR SQL Server.

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

Исправленная политика для сборок СРЕДЫ CLR и системных сборок SQL Server предоставляет им полное доверие.

Указанная пользователем часть политики узла SQL Server основана на владельце сборки, указывающей один из трех контейнеров разрешений для каждой сборки. Дополнительные сведения о разрешениях безопасности, перечисленных ниже, см. в пакете SDK для .NET Framework.

БЕЗОПАСНЫЙ

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

SAFE сборки имеют следующие разрешения и значения:

Разрешение Value(s)/Description
SecurityPermission Execution: Разрешение на выполнение управляемого кода.
SqlClientPermission Context connection = true, context connection = yes: можно использовать только контекст-соединение, и строка подключения может указывать только значение context connection=true или context connection=yes.

AllowBlankPassword = false: Пустые пароли не разрешены.

EXTERNAL_ACCESS

EXTERNAL_ACCESS сборки имеют те же разрешения, что SAFE и сборки, с дополнительной возможностью доступа к внешним ресурсам системы, таким как файлы, сети, переменные среды и реестр.

EXTERNAL_ACCESS сборки также имеют следующие разрешения и значения:

Разрешение Value(s)/Description
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 позволяет сборкам неограниченный доступ к ресурсам как внутри, так и за пределами 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 применяет следующие правила:

Если Затем
Контекст выполнения соответствует имени входа SQL Server. Попытки получить доступ к внешним ресурсам отклоняются, и активизируется исключение безопасности.
Контекст выполнения соответствует имени входа Windows, и контекстом выполнения является первоначальный вызывающий объект. Доступ к внешнему ресурсу осуществляется в контексте безопасности учетной записи службы SQL Server.
Вызывающий объект не является исходным вызывающим элементом. Доступ запрещается, и активизируется исключение безопасности.
Контекст выполнения соответствует имени входа Windows, а контекст выполнения — исходный вызывающий объект, и вызывающий объект олицетворен. Access использует контекст безопасности вызывающего объекта; не учетная запись службы.

Сводка набора разрешений

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