Управление доступом для кода на основе интеграции со средой CLRCLR Integration Code Access Security

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server нетБаза данных SQL AzureнетХранилище данных SQL AzureнетParallel Data WarehouseAPPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Среда CLR поддерживает модель безопасности, называемую управлением доступом для кода.The common language runtime (CLR) supports a security model called code access security for managed code. В этой модели разрешения предоставляются сборкам на основе идентификатора кода.In this model, permissions are granted to assemblies based on the identity of the code. Дополнительные сведения см. в разделе «Управление доступом для кода» справочной документации пакета средств разработки программного обеспечения .NET Framework.For more information, see the "Code Access Security" section in the .NET Framework software development kit.

Политика безопасности, которая регламентирует разрешения, предоставляемые сборкам, определяется в трех разных местах.The security policy that determines the permissions granted to assemblies is defined in three different places:

  • Политики компьютера: это политика действует для всего управляемого кода, выполняющихся на машине, на котором SQL ServerSQL Server установлен.Machine policy: This is the policy in effect for all managed code running in the machine on which SQL ServerSQL Server is installed.

  • Политика пользователя: это политика действует для управляемого кода, выполняемый в рамках процесса.User policy: This is the policy in effect for managed code hosted by a process. Для SQL ServerSQL Server применяемая политика пользователя зависит от учетной записи Windows, от имени которой работает служба SQL ServerSQL Server.For SQL ServerSQL Server, the user policy is specific to the Windows account on which the SQL ServerSQL Server service is running.

  • Разместить политики: политика, Настройка узлом среды CLR (в этом случае SQL ServerSQL Server), распространяется на управляемый код, выполняемый на узле.Host policy: This is the policy set up by the host of the CLR (in this case, SQL ServerSQL Server) that is in effect for managed code running in that host.

Механизм управления доступом к коду, поддерживаемый средой CLR, основан на предположении, что в среде времени выполнения может размещаться код, доверенный полностью или частично.The code access security mechanism supported by the CLR is based on the assumption that the runtime can host both fully trusted and partially trusted code. Ресурсы, которые защищены с помощью управления доступом для кода среды CLR, обычно заключаются в оболочку управляемого API-интерфейсы, которые требуют соответствующих разрешений перед предоставлением ему доступа к ресурсу.The resources that are protected by CLR code access security are typically wrapped by managed application programming interfaces that require the corresponding permission before allowing access to the resource. Требование разрешения удовлетворяется только в том случае, если все вызывающие элементы (на уровне сборки) в стеке вызовов обладают соответствующими ресурсными разрешениями.The demand for the permission is satisfied only if all the callers (at the assembly level) in the call stack have the corresponding resource permission.

Набор разрешений CAS, которые предоставляются управляемому коду при его выполнении в SQL ServerSQL Server, является пересечением наборов разрешений, предоставляемых на трех указанных уровнях политики.The set of code access security permissions that are granted to managed code when running inside SQL ServerSQL Server is the intersection of the set of permissions granted by the above three policy levels. Даже если SQL ServerSQL Server предоставляет ряд разрешений сборке, загруженной в SQL ServerSQL Server, в конечном итоге набор разрешений, которые предоставлены пользовательскому коду, может быть подвергнут дальнейшему сокращению с учетом политик, заданных на уровне пользователя и компьютера.Even if SQL ServerSQL Server grants a set of permissions to an assembly loaded in SQL ServerSQL Server, the eventual set of permissions given to user code may be restricted further by the user and machine-level policies.

Наборы разрешений на уровне политики узла SQL ServerSQL Server Host Policy Level Permission Sets

Набор разрешений CAS, который предоставляется определяемым пользователем сборкам на уровне политики узла SQL ServerSQL Server, определяется набором разрешений, заданным при создании сборки.The set of code access security permissions granted to assemblies by the SQL ServerSQL Server host policy level is determined by the permission set specified when creating the assembly. Существует три набора разрешений: БЕЗОПАСНОМ, EXTERNAL_ACCESS и UNSAFE (с использованием PERMISSION_SET параметр Создание сборки (Transact-SQL)).There are three permission sets: SAFE, EXTERNAL_ACCESS and UNSAFE (specified using the PERMISSION_SET option of CREATE ASSEMBLY (Transact-SQL)).

Среде CLR, размещенной в SQL ServerSQL Server, предоставляется уровень политики безопасности на уровне сервера; данная политика представляет собой дополнительный уровень политики, расположенный ниже двух всегда действующих уровней политики.SQL ServerSQL Server supplies a host-level security policy level to the CLR while hosting it; this policy is an additional policy level below the two policy levels that are always in effect. Данная политика задается для каждого домена приложений, создаваемого службами SQL ServerSQL Server.This policy is set for every application domain that is created by SQL ServerSQL Server. Эта политика не предназначена для домена приложения по умолчанию, который применяется при создании в SQL ServerSQL Server экземпляра среды CLR.This policy is not meant for the default application domain that would be in effect when SQL ServerSQL Server creates an instance of the CLR.

Политика на уровне узла служб SQL ServerSQL Server является сочетанием фиксированной политики служб SQL ServerSQL Server для системных сборок и пользовательской политики для пользовательских сборок.The SQL ServerSQL Server host-level policy is a combination of SQL ServerSQL Server fixed policy for system assemblies and user-specified policy for user assemblies.

Фиксированная политика для сборок CLR и системных сборок SQL ServerSQL Server предоставляет этим сборкам полное доверие.The fixed policy for CLR assemblies and SQL ServerSQL Server system assemblies grants them full trust.

В основе пользовательской части политики сервера SQL ServerSQL Server лежит указание владельцем сборки одного из трех сегментов разрешений для каждой сборки.The user-specified portion of the SQL ServerSQL Server host policy is based on the assembly owner specifying one of three permission buckets for each assembly. Дополнительные сведения о правах доступа, перечисленных ниже, см. в документации пакета SDK для платформы .NET Framework.For more information about the security permissions listed below, see the .NET Framework SDK.

SAFESAFE

Разрешаются только внутренние вычисления и локальный доступ к данным.Only internal computation and local data access are allowed. БЕЗОПАСНЫЙ является наиболее ограниченным набором разрешений.SAFE is the most restrictive permission set. Код, выполняемый сборкой с БЕЗОПАСНОМ разрешений не может получить доступ к внешним системным ресурсам — файлам, сети, переменные среды или реестр.Code executed by an assembly with SAFE permissions cannot access external system resources such as files, the network, environment variables, or the registry.

БЕЗОПАСНЫЙ сборки имеют следующие разрешения и значения:SAFE assemblies have the following permissions and values:

РазрешениеPermission Значения и описаниеValue(s)/Description
SecurityPermissionSecurityPermission Выполнение: разрешение на выполнение управляемого кода.Execution: Permission to execute managed code.
Разрешение SQL-клиентаSqlClientPermission Контекстное соединение = true, контекстное соединение = yes: только контекстное соединение может использоваться и строку подключения можно указать только значение «Контекстное соединение = true» или «контекстное соединение = yes».Context connection = true, context connection = yes: Only the context-connection can be used and the connection string can only specify a value of "context connection=true" or "context connection=yes".

AllowBlankPassword = false: пустые пароли не допускаются.AllowBlankPassword = false: Blank passwords are not permitted.

EXTERNAL_ACCESSEXTERNAL_ACCESS

Сборки EXTERNAL_ACCESS имеют те же разрешения, что БЕЗОПАСНОМ сборки, с дополнительными возможностями для доступа к внешним системным ресурсам, например файлы, сети, переменные среды и реестр.EXTERNAL_ACCESS assemblies have the same permissions as SAFE assemblies, with the additional ability to access external system resources such as files, networks, environmental variables, and the registry.

EXTERNAL_ACCESS сборки также имеют следующие разрешения и значения:EXTERNAL_ACCESS assemblies also have the following permissions and values:

РазрешениеPermission Значения и описаниеValue(s)/Description
DistributedTransactionPermissionDistributedTransactionPermission Неограниченный: распределенные транзакции допускаются.Unrestricted: Distributed transactions are allowed.
DNSPermissionDNSPermission Неограниченный: разрешение на запрос сведений с DNS-серверов.Unrestricted: Permission to request information from Domain Name Servers.
EnvironmentPermissionEnvironmentPermission Неограниченный: полный разрешен доступ к системным и пользовательским переменным среды.Unrestricted: Full access to system and user environment variables is allowed.
EventLogPermissionEventLogPermission Администрирование: разрешаются следующие действия: Создание источника событий, чтение существующих журналов, удаление источников событий или журналов, формирование ответов на записи, очистка журнала событий, прослушивание событий и доступ к коллекции всех журналов событий.Administer: The following actions are allowed: creating an event source, reading existing logs, deleting event sources or logs, responding to entries, clearing an event log, listening to events, and accessing a collection of all event logs.
FileIOPermissionFileIOPermission Неограниченный: полный доступ к файлам и папок разрешается.Unrestricted: Full access to files and folders is allowed.
KeyContainerPermissionKeyContainerPermission Неограниченный: полный доступ к контейнерам ключей.Unrestricted: Full access to key containers is allowed.
NetworkInformationPermissionNetworkInformationPermission Доступ: Pinging разрешено.Access: Pinging is permitted.
RegistryPermissionRegistryPermission Предоставляет право чтения разделов для HKEY_CLASSES_ROOT, HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER, HKEY_CURRENT_CONFIGи HKEY_USERS.Allows read rights to HKEY_CLASSES_ROOT, HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER, HKEY_CURRENT_CONFIG, and HKEY_USERS.
SecurityPermissionSecurityPermission Проверочное утверждение: способность подтверждать, что все объекты, вызывающие этого кода имеют необходимое разрешение для операции.Assertion: Ability to assert that all the callers of this code have the requisite permission for the operation.

ControlPrincipal: возможность управлять объектом участника.ControlPrincipal: Ability to manipulate the principal object.

Выполнение: разрешение на выполнение управляемого кода.Execution: Permission to execute managed code.

SerializationFormatter: возможность предоставления служб сериализации.SerializationFormatter: Ability to provide serialization services.
SmtpPermissionSmtpPermission Доступ: разрешены исходящие соединения с портом сервера SMTP 25.Access: Outbound connections to SMTP host port 25 are allowed.
SocketPermissionSocketPermission Подключение: разрешены исходящие соединения (все порты, все протоколы) для адреса транспорта.Connect: Outbound connections (all ports, all protocols) on a transport address are allowed.
Разрешение SQL-клиентаSqlClientPermission Неограниченный: полный разрешен доступ к источнику данных.Unrestricted: Full access to the datasource is allowed.
StorePermissionStorePermission Неограниченный: полный доступ к сертификату X.509 допускается хранилищ.Unrestricted: Full access to X.509 certificate stores is allowed.
WebPermissionWebPermission Подключение: разрешены исходящие соединения для веб-ресурсов.Connect: Outbound connections to web resources are allowed.

UNSAFEUNSAFE

Набор UNSAFE предоставляет сборкам неограниченный доступ к внутренним и внешним ресурсам SQL ServerSQL Server.UNSAFE allows assemblies unrestricted access to resources, both within and outside SQL ServerSQL Server. Код, исполняемый внутри UNSAFE сборки также может вызывать неуправляемый код.Code executing from within an UNSAFE assembly can also call unmanaged code.

НЕБЕЗОПАСНЫЙ сборки, получающие FullTrust.UNSAFE assemblies are given FullTrust.

Важно!

БЕЗОПАСНЫЙ является рекомендованной установкой разрешений для сборок, которые выполняют задачи вычисления и данных управления без доступа к ресурсам за пределами SQL ServerSQL Server.SAFE is the recommended permission setting for assemblies that perform computation and data management tasks without accessing resources outside SQL ServerSQL Server. EXTERNAL_ACCESS рекомендуется для сборок, которые обращаются к ресурсам за пределами SQL ServerSQL Server.EXTERNAL_ACCESS is recommended for assemblies that access resources outside SQL ServerSQL Server. EXTERNAL_ACCESS сборки по умолчанию, выполняются как SQL ServerSQL Server учетной записи службы.EXTERNAL_ACCESS assemblies by default execute as the SQL ServerSQL Server service account. Существует возможность EXTERNAL_ACCESS кода можно явно применять олицетворение контекста безопасности вызывающего объекта проверки подлинности Windows.It is possible for EXTERNAL_ACCESS code to explicitly impersonate the caller's Windows Authentication security context. Поскольку по умолчанию для выполнения в качестве SQL ServerSQL Server учетная запись службы, разрешение на выполнение EXTERNAL_ACCESS должно предоставляться только именам входа, которым доверено выполнение в качестве учетной записи службы.Since the default is to execute as the SQL ServerSQL Server service account, permission to execute EXTERNAL_ACCESS should only be given to logins trusted to run as the service account. С точки зрения безопасности EXTERNAL_ACCESS и UNSAFE сборки идентичны.From a security perspective, EXTERNAL_ACCESS and UNSAFE assemblies are identical. Тем не менее EXTERNAL_ACCESS сборки обеспечивают различные надежные и устойчивые средства защиты, не входящие в UNSAFE сборок.However, EXTERNAL_ACCESS assemblies provide various reliability and robustness protections that are not in UNSAFE assemblies. Указание UNSAFE позволяет коду в сборке выполнять запрещенные операции SQL ServerSQL Server пространстве процесса и таким образом можно нарушать устойчивость и масштабируемость SQL ServerSQL Server.Specifying UNSAFE allows the code in the assembly to perform illegal operations against the SQL ServerSQL Server process space, and hence can potentially compromise the robustness and scalability of SQL ServerSQL Server. Дополнительные сведения о создании сборок CLR в SQL ServerSQL Server, см. в разделе Управление сборками интеграции со средой CLR.For more information about creating CLR assemblies in SQL ServerSQL Server, see Managing CLR Integration Assemblies.

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

Если зарегистрирован определяемого пользователем типа (UDT), хранимой процедуры или другой тип сборки конструкция БЕЗОПАСНОМ набор разрешений, то управляемый код выполняется в конструкции не способен получить доступ к внешним ресурсам.If a user-defined type (UDT), stored procedure, or other type of construct assembly is registered with the SAFE permission set, then managed code executing in the construct is unable to access external resources. Тем не менее если параметр EXTERNAL_ACCESS или UNSAFE указываются наборы разрешений и управляемом коде предпринимается попытка доступа к внешним ресурсам SQL ServerSQL Server применяются следующие правила:However, if either the EXTERNAL_ACCESS or UNSAFE permission sets are specified, and managed code attempts to access external resources, SQL ServerSQL Server applies the following rules:

Если операторIf ТоThen
Контекст выполнения соответствует имени входа SQL ServerSQL Server.The execution context corresponds to a SQL ServerSQL Server login. Попытки получить доступ к внешним ресурсам отклоняются, и активизируется исключение безопасности.Attempts to access external resources are denied and a security exception is raised.
Контекст выполнения соответствует имени входа Windows, и контекстом выполнения является первоначальный вызывающий объект.The execution context corresponds to a Windows login and the execution context is the original caller. Доступ к внешнему ресурсу предоставляется в контексте безопасности учетной записи SQL ServerSQL Server.The external resource is accessed under the security context of the SQL ServerSQL Server service account.
Вызывающий объект не является первоначальным вызывающим объектом.The caller is not the original caller. Доступ запрещается, и активизируется исключение безопасности.Access is denied and a security exception is raised.
Контекст выполнения соответствует имени входа Windows, контекст выполнения является исходным вызывающим объектом, а к вызывающему объекту применяется олицетворение.The execution context corresponds to a Windows login and the execution context is the original caller and the caller has been impersonated. При доступе используется контекст безопасности вызывающего объекта, а не учетная запись службы.Access uses the caller security context; not the service account.

Сводные данные о наборе разрешенийPermission Set Summary

На следующей диаграмме показаны ограничения и разрешения, предоставленные БЕЗОПАСНОМ, EXTERNAL_ACCESS, и UNSAFE наборы разрешений.The following chart summarizes the restrictions and permissions granted to the SAFE, EXTERNAL_ACCESS, and UNSAFE permission sets.

SAFESAFE EXTERNAL_ACCESSEXTERNAL_ACCESS UNSAFEUNSAFE
Разрешения управления доступом для кодаCode Access Security Permissions Только выполнениеExecute only Выполнение и доступ к внешним ресурсамExecute + access to external resources Неограниченное (включая P/Invoke)Unrestricted (including P/Invoke)
Ограничения модели программированияProgramming model restrictions ДаYes ДаYes Без ограниченийNo restrictions
Требование к проверяемостиVerifiability requirement ДаYes ДаYes НетNo
Доступ к локальным даннымLocal data access ДаYes ДаYes ДаYes
Возможность вызова машинного кодаAbility to call native code НетNo НетNo ДаYes

См. такжеSee Also

Безопасность интеграции со средой CLR CLR Integration Security
Атрибуты защиты узла и программирование интеграции со средой CLR Host Protection Attributes and CLR Integration Programming
Ограничения модели программирования интеграции со средой CLR CLR Integration Programming Model Restrictions
Среда размещения CLRCLR Hosted Environment