C# для профессионалов. Том II
Шрифт:
□ IsolatedStoragePermission — доступ к изолированной памяти; памяти, которая ассоциируется с отдельным пользователем и с некоторыми аспектами идентичности кода, такими как его web-сайт, сигнатура или издатель.
□ MessageQueuePermission — использование очереди сообщений с помощью Microsoft Message Queue.
□ OleDbPermission — доступ к базам данных с помощью OLE DB.
□ PerformanceCounterPermission — использование показателей производительности.
□ PrintingPermission —
□ ReflectionPermission — доступ к информации о типе с помощью
□ RegistryPermission — чтение, запись, создание или удаление ключей и значений в реестре.
□ SecurityPermission — выполнение, объявление полномочий, обращение к неуправляемому коду, пропуск проверки, и другие полномочия.
□ ServiceControllerPermission — получение доступа (для выполнения или остановки) к службам Windows.
□ SocketPermission — создание или принятие соединения TCP/IP на транспортном адресе.
□ SQLClientPermission — доступ к базам данных SQL.
□ UIPermission — доступ к интерфейсу пользователя.
□ WebPermission — осуществление или принятие соединения с/из Web.
С помощью любого из этих классов полномочий определяется еще более глубокий уровень детализации. Позже будет показан пример, запрашивающий не просто доступ к файлу, а определенный уровень такого доступа.
С практической точки зрения настоятельно рекомендуется все попытки использования ресурсов, связанных с полномочиями в этом списке, помещать внутри блоков обработки ошибок try-catch, чтобы приложение ухудшалось постепенно, если ему придется выполняться с ограниченными полномочиями. Конструкция приложения должна определять, как приложение будет действовать в такой ситуации, не стоит предполагать, что оно начнет выполняться с такой же политикой системы безопасности, с которой оно разрабатывалось. Например, если приложение не может обратиться к локальному диску, закончится ли оно или должно действовать другим способом?
Сборка связывается с несколькими группами кода, действующие полномочия сборки в рамках политики системы безопасности являются объединением всех полномочий, предоставленных всем группам кода, которым эта сборка принадлежит. В результате, каждая группа кода, которой соответствует сборка, будет расширять набор допустимых действий сборки. Отметим, что группы кода, расположенные ниже в дереве, часто присваивают более свободные полномочия, чем расположенные выше.
Существует другое множество полномочий, которыми располагает CLR на основе идентичности кода. Эти права не могут быть предоставлены явно, так как они связаны непосредственно со свидетельством, которое CLR сопоставляет со сборкой, и называются полномочиями идентичности (Identity Permisssions). Вот имена классов
□ PublisherIdentityPermission — цифровая подпись издателя программного обеспечения.
□ SiteIdentityPermission — расположение web-сайта, из которого получен код.
□ StrongNameIdentityPermission — устойчивое имя сборки.
□ URLIdentityPermission — URL, откуда получен код (включая протокол, например
□ ZoneIdentityPermission — зона, являющаяся местом происхождения сборки.
Обычно полномочия применяются блоками, вот почему .NET предоставляет также множества полномочий (Permission Sets). Это списки прав доступа к коду, сгруппированные в именованном множестве. Вот готовые именованные множества полномочий, существующие в системе:
□ FullTrust — никаких ограничений на полномочия.
□ Execution — возможность выполнения, но без доступа к каким-либо защищенным ресурсам.
□ Nothing — никаких полномочий и невозможность выполнения.
□ LocalIntranet — политика по умолчанию для локальной интранет, подмножество полного множества полномочий. Можно изменять это множество полномочий.
□ Internet — политика по умолчанию для кода неизвестного происхождения. Администратор может управлять полномочиями в этом множестве полномочий.
□ Everything — все стандартные полномочия, за исключением полномочия пропускать проверку кода. Администратор может изменить чье-либо право в этом множестве полномочий. Это полезно там, где политика по умолчанию должна быть строже.
Отметим, что из этих именованных множеств можно изменять определения только трех последних, а первые три являются фиксированными и не могут изменяться.
Полномочия идентичности не могут включаться в множества полномочий, так как CLR является единственным уполномоченным, который может предоставить коду права идентичности. Например, если фрагмент кода принадлежит определенному издателю, то мало смысла со стороны администратора предоставлять ему полномочия идентичности, связанные с другим издателем. CLR дает права, если необходимо, а мы может затем при желании их использовать.
Просмотр полномочий сборки
Предположим, что используется приложение, написанное компанией Microsoft, и мы пытаемся использовать свойство, которое раньше не использовалось. Приложение не имеет копии кода, хранящейся локально, поэтому оно запрашивает ее, и код загружается в глобальный кэш сборок. При таком сценарии для кода из Интернета, опубликованного указанной организацией, подписавшей сборку с помощью сертификата, мы обнаружим, что членство группы кода сборки выглядит примерно так: