Ватсон Карли
Шрифт:
Однако .NET существенно помогает операционной системе в ответах на вопросы, сколько полномочий предоставить коду, будет ли он приложением интранет, элементом управления на странице Web или приложением Windows Forms, загруженным от поставщика программного обеспечения в Интернете.
Конфигурационный файл системы безопасности
Как мы уже видели, общим звеном, соединяющим группы кода, полномочия и множества полномочий, являются три уровня политики системы безопасности (Enterprise, Machine и User). Информация о конфигурации системы безопасности в .NET хранится в конфигурационных файлах XML, которые защищены системой безопасности Windows. Например, политика безопасности уровня Machine распространяется только на пользователей групп Administrator, Power User и SYSTEM в Windows 2000.
В Windows 2000 файлы, которые хранят политику безопасности расположены в следующих местах:
Конфигурация политики предприятия
Конфигурация политики машины
Конфигурация политики пользователя
Номер версии, отмеченный несколькими 'x', будет меняться в зависимости от версии .NET Framework, установленной на машине. При необходимости можно вручную редактировать эти конфигурационные файлы, например, если администратору нужно сконфигурировать политику для пользователя не регистрируясь в системе со своей учетной записью. Однако в общем рекомендуется использовать
Простой пример
Создадим небольшое приложение, обращающееся к локальному диску, поведение которого требует тщательного управления. Приложение относится к C# Windows Forms с окном списка и кнопкой. Если нажать на кнопку, то окно списка заполняется из файла с именем
Приложение создается с помощью Visual Studio.NET, единственными изменениями в нем являются добавления к форме окна списка и кнопки Load Data, а также подключение к кнопке события, что выглядит следующим образом.
Метод открывает простой текстовый файл из корня диска
Если выполнить приложение на локальной машине и нажать кнопку, то мы увидим загруженные из корня диска
Вспомним, что полномочия группы кода в зоне интранет являются более строгими, чем на локальной машине, в частности, они не разрешают доступ к локальному диску (за исключением папки, из которой выполняется приложение). Если снова выполнить приложение, но в этот раз с общего сетевого диска, оно будет выполняться так же, как и раньше, поскольку ему предоставлены полномочия для выполнения и доступа к интерфейсу пользователя. Однако, если теперь нажать кнопку Load Data на форме, будет порождаться исключение безопасности:
В тексте сообщения исключения упоминается объект
По умолчанию группе кода Intranet предоставляется множество полномочий
Если теперь снова выполнить приложение с общего сетевого диска и нажать на кнопку, мы увидим, что окно списка заполняется из файла в корне диска
В подобных сценариях, где используются ресурсы, управляемые полномочиями, рекомендуется расширять код, чтобы исключения безопасности перехватывались и приложение могло постепенно уменьшать свою деятельность. Например, в данном приложении можно добавить блок try-catch вокруг кода доступа к файлу и, если порождается исключение