Запрос разрешений

Обновлен: Ноябрь 2007

Запрос разрешений — это способ известить среду выполнения о том, какие действия должны быть разрешены коду. Разрешения для сборки запрашиваются путем установки атрибутов (декларативный синтаксис) в области действия сборки в коде. При создании сборки компилятор языка программирования сохраняет запрашиваемые разрешения в манифесте сборки. Во время загрузки среда выполнения проверяет запросы разрешений и применяет политику безопасности с целью определения, какие разрешения следует предоставить сборке. Запросы влияют на среду выполнения только с целью запрета разрешений для кода и не могут принудить ее предоставить коду дополнительные разрешения. Каков бы ни был уровень разрешений, предоставляемых коду, локальная политика администрирования всегда будет иметь перед ними приоритет.

Несмотря на то, что для компиляции кода ему нет необходимости запрашивать разрешения, существуют веские причины их запроса.

  • Запрос разрешений увеличивает вероятность того, что код будет выполняться правильно, если ему будет разрешено выполняться. Код, запрашивающий минимальный набор разрешений, не будет выполняться, если не получит этих разрешений. Без определения минимального набора разрешений, код должен будет корректно обрабатывать любые ситуации, в которых отсутствие некоторого разрешения может привести к некорректному его выполнению.

  • Запрос разрешений помогает быть уверенным в том, что код получает только те разрешения, которые ему необходимы. Если код не получает лишних разрешений, он не может повредить ресурсы, защищенные этими дополнительными разрешениями, даже если будет использован вредоносным кодом или будет содержать ошибки, которыми можно управлять в целях повреждения ресурсов. Следует запрашивать только те разрешения, которые необходимы коду, и никаких больше.

  • Запрос разрешений позволяет администраторам узнавать, какой минимум разрешений необходим приложению, чтобы соответствующим образом настроить политику безопасности. Администраторы используют средство просмотра разрешений (Permview.exe) для анализа сборок и настройки политики безопасности на выдачу требуемых разрешений. Если необходимые приложению разрешения не запрашиваются явно, средство просмотра разрешений не может сообщить никакой информации о разрешениях, требуемых вашему приложению. Если администратор не имеет этой информации, приложение будет сложно администрировать.

Запрос разрешений информирует среду выполнения о том, какие разрешения нужны или же не нужны вашему приложению. Например, если приложение записывает данные на локальный жесткий диск, не пользуясь изолированным хранилищем, оно должно обладать разрешением FileIOPermission. Если код не запросит разрешение FileIOPermission и локальные параметры безопасности не позволят приложению получить данное разрешение, произойдет исключение безопасности, когда приложение попытается выполнить запись на диск. Даже если приложение может обработать это исключение, ему не будет разрешено осуществить запись на диск. Такое поведение может разочаровать пользователей, если ваше приложение — редактор текстов, которым они пользовались в течение длительного времени. С другой стороны, если приложение запросит разрешение FileIOPermission, а локальные параметры безопасности не позволят ему получить FileIOPermission, приложение создаст исключение уже при запуске, и пользователю не придется сталкиваться с проблемой потери результатов работы. Кроме того, если приложение запрашивает FileIOPermission и является доверенным приложением, администратор может скорректировать политику безопасности, чтобы позволить приложению выполняться с удаленного общего ресурса.

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

Для запроса разрешений необходимо знать, какие ресурсы и защищенные операции использует ваш код, а также какие разрешения защищают эти ресурсы и операции. Кроме того, необходимо следить за всеми ресурсами, к которым осуществляют доступ методы библиотек классов, вызываемых вашими компонентами. Список разрешений доступа к коду, включенных в .NET Framework, см. в разделе Разрешения.

В следующей таблице приведено описание типов запросов разрешений.

Запрос разрешения

Описание

Запрос минимальных разрешений (RequestMinimum)

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

Запрос дополнительных разрешений (RequestOptional)

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

Запрос запрещенных разрешений (RequestRefuse)

Разрешения, которые ни в коем случае не должны быть предоставлены коду, даже если политика безопасности позволяет получить их.

Применение всех вышеуказанных запросов к встроенным наборам разрешений (Запрашивание встроенных наборов разрешений).

Встроенные наборы разрешений, включая Nothing, Execution, FullTrust, Internet, LocalIntranet и SkipVerification.

Применение всех вышеуказанных запросов к разрешениям в XML-кодировке (Запрашивание разрешений в XML-кодировке).

XML-представление (строка, содержащая закодированный в XML набор разрешений, или же местонахождение XML-файла, содержащего закодированный набор разрешений) желаемого набора разрешений.

Если указаны обязательные разрешения (с использованием RequestMinimum), то коду будут выданы все запрошенные разрешения, допускаемые политикой безопасности. Выполнение кода будет разрешено только в том случае, если он получит все требуемые разрешения.

Запрос необязательных разрешений без запроса необходимых разрешений может в некоторых случаях жестко ограничить разрешения, выдаваемые сборке. Например, предположим, что политика безопасности в обычных условиях выдает сборке A разрешения, ассоциированные с именованным набором разрешений Everything. Если разработчик сборки A запросит разрешение A как необязательное и не запросит ни одного из необходимых разрешений, сборке A будет выдано либо разрешение A (если политика безопасности это допускает), либо не будет выдано вообще никаких разрешений.

См. также

Задачи

Практическое руководство. Запрос разрешения для именованного набора разрешений

Основные понятия

Основы управления доступом для кода

Манифест сборки

Разрешения безопасности

Запрос разрешений в XML-кодировке

Политика безопасности

Ссылки

FileIOPermission

SecurityAction.RequestMinimum

SecurityAction.RequestOptional

RequestRefuse

Другие ресурсы

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