Архитектура технологии ACL
Пространство имен System.Security.AccessControl обеспечивает доступ к спискам управления доступом (ACL) посредством удобных в использовании классов, в значительной мере скрывающих сложность системы безопасности ACL Windows. Кроме того, пространство имен System.Security.AccessControl включает несколько классов, обеспечивающих дополнительные возможности доступа к системе безопасности Windows ACL.
Платформа .NET Framework обеспечивает доступ к спискам ACL для следующих ресурсов.
Ключи шифрования
Каталоги
Дескрипторы ожидания событий
Файлы
Mutexes
Разделы реестра
Семафоры
Для каждого из этих типов ресурсов имеется несколько классов, которые можно использовать для создания и изменения списков ACL.
Иерархия классов ACL
В большинстве случаев для создания и изменения списков ACL вместо расширенных классов можно использовать абстрактные классы более высокого уровня. Классы более высокого уровня для каждого типа ресурсов имеют следующую форму.
Класс, инкапсулирующий списки управления доступом DACL и SACL. Данный класс имеет имя <Название ресурса>Security. Например, классы FileSecurity и DirectorySecurity инкапсулируют списки DACL и SACL для файлов и папок.
Класс, инкапсулирующий запись управления доступом (ACE). Данный класс имеет имя <Название ресурса>AccessRule.
Класс, инкапсулирующий запись управления доступом аудита. Данный класс имеет имя <Название ресурса>AuditRule.
Несколько перечислений, позволяющих создавать определенные правила доступа и аудита.
Полный список высокоуровневых классов ACL см. в разделе Сводка по технологиям для записей ACL.
Добавление записей управления доступом в списки ACL
После создания записи управления доступом с помощью одного из классов правил доступа или аудита правило можно добавить к ресурсу или использовать его для удаления из ресурса существующего правила. Например, с помощью класса FileSystemAccessRule было создано правило, разрешающее открывать файл только администраторам. Далее можно добавить правило к объекту FileSecurity или удалить аналогичное правило из объекта FileSecurity.
Добавление записи управления доступом, разрешающей доступ, не гарантирует того, что участник получит доступ, так как правило запрещения всегда имеет приоритет перед правилом разрешения. Например, если добавить к файлу правило разрешения доступа для системной учетной записи, это не значит, что доступ к файлу обязательно будет предоставлен, так как он может быть запрещен другим правилом.
Каждый объект <Название ресурса>Security, связанный с ресурсом, предоставляет следующие методы для добавления или удаления правил доступа и аудита.
Метод |
Описание |
---|---|
AddAccessRule и AddAuditRule |
Производит поиск правила доступа или аудита, которое можно объединить с новым правилом. Если поиск не дал результатов, добавляется новое правило. |
SetAccessRule |
Удаляет все правила управления доступом с тем же пользователем и значением свойства AccessControlType (Allow или Deny), что и у указанного правила, после чего добавляет указанное правило. |
SetAuditRule |
Удаляет все правила аудита с тем же пользователем, что и у указанного правила, вне зависимости от значения свойства AuditFlags, после чего добавляет указанное правило. |
ResetAccessRule |
Удаляет все правила управления доступом с тем же пользователем, что и у указанного правила, вне зависимости от значения свойства AccessControlType, после чего добавляет указанное правило. |
RemoveAccessRule |
Производит поиск правила управления доступом с тем же пользователем и значением свойства AccessControlType (Allow или Deny), что и у указанного правила, и совместимыми флагами наследования и распространения. Если поиск дал результаты, права, содержащиеся в указанном правиле доступа, удаляются из правила. |
RemoveAuditRule |
Производит поиск правила управления аудитом с тем же пользователем, что и у указанного правила, и совместимыми флагами наследования и распространения. Если поиск дал результаты, права, содержащиеся в указанном правиле, удаляются из правила. |
RemoveAccessRuleAll |
Производит поиск всех правил доступа с тем же пользователем и значением свойства AccessControlType (Allow или Deny), что и у указанного правила, и удаляет найденные правила. |
RemoveAuditRuleAll |
Производит поиск всех правил аудита с тем же пользователем, что и у указанного правила, и удаляет найденные правила. |
RemoveAccessRuleSpecific и RemoveAuditRuleSpecific |
Производит поиск правила доступа или аудита, в точности соответствующего указанному правилу, и удаляет найденное правило. |
AddAccessRule и AddAuditRule |
Производит поиск правила доступа или аудита, которое можно объединить с новым правилом. Если поиск не дал результатов, добавляется новое правило. |
Получение и задание списков ACL
Каждый защищенный ресурс имеет методы, служащие для получения и задания объектов <Имя ресурса>Security, связанных с ресурсом. Чтобы получить существующие списки ACL для определенного ресурса, используйте методы GetAccessControl, связанные с ресурсом. Чтобы применить внесенные изменения к ресурсу, используйте методы SetAccesscontrol, связанные с ресурсом. Обратите внимание, что применение внесенных изменений к ресурсу возможно только явным образом с помощью одного из методов задания.
Полный список всех методов получения и задания для каждого защищенного ресурса см. в разделе Сводка по технологиям для записей ACL.