SemaphoreSecurity Класс

Определение

Обеспечивает безопасность управления доступом Windows для именованного семафора. Этот класс не наследуется.

public sealed class SemaphoreSecurity : System.Security.AccessControl.NativeObjectSecurity
[System.Security.SecurityCritical]
public sealed class SemaphoreSecurity : System.Security.AccessControl.NativeObjectSecurity
[System.Runtime.InteropServices.ComVisible(false)]
public sealed class SemaphoreSecurity : System.Security.AccessControl.NativeObjectSecurity
Наследование
Атрибуты

Примеры

В следующем примере кода показано разделение между Allow правилами и Deny правилами, а также показано сочетание прав в совместимых правилах. В примере создается SemaphoreSecurity объект , добавляются правила, разрешающие и запрещающие различные права для текущего пользователя, и отображается результирующая пара правил. Затем в примере разрешены новые права для текущего пользователя и отображается результат, показывающий, что новые права объединены с существующим Allow правилом.

Примечание

В этом примере объект безопасности не присоединяет к объекту Semaphore . Примеры присоединения объектов безопасности можно найти в Semaphore.GetAccessControl и Semaphore.SetAccessControl.

using System;
using System.Threading;
using System.Security.AccessControl;
using System.Security.Principal;

public class Example
{
    public static void Main()
    {
        // Create a string representing the current user.
        string user = Environment.UserDomainName + "\\" + 
            Environment.UserName;

        // Create a security object that grants no access.
        SemaphoreSecurity mSec = new SemaphoreSecurity();

        // Add a rule that grants the current user the 
        // right to enter or release the semaphore.
        SemaphoreAccessRule rule = new SemaphoreAccessRule(user, 
            SemaphoreRights.Synchronize | SemaphoreRights.Modify, 
            AccessControlType.Allow);
        mSec.AddAccessRule(rule);

        // Add a rule that denies the current user the 
        // right to change permissions on the semaphore.
        rule = new SemaphoreAccessRule(user, 
            SemaphoreRights.ChangePermissions, 
            AccessControlType.Deny);
        mSec.AddAccessRule(rule);

        // Display the rules in the security object.
        ShowSecurity(mSec);

        // Add a rule that allows the current user the 
        // right to read permissions on the semaphore. This rule
        // is merged with the existing Allow rule.
        rule = new SemaphoreAccessRule(user, 
            SemaphoreRights.ReadPermissions, 
            AccessControlType.Allow);
        mSec.AddAccessRule(rule);

        ShowSecurity(mSec);
    }

    private static void ShowSecurity(SemaphoreSecurity security)
    {
        Console.WriteLine("\r\nCurrent access rules:\r\n");

        foreach(SemaphoreAccessRule ar in 
            security.GetAccessRules(true, true, typeof(NTAccount)))
        {
            Console.WriteLine("        User: {0}", ar.IdentityReference);
            Console.WriteLine("        Type: {0}", ar.AccessControlType);
            Console.WriteLine("      Rights: {0}", ar.SemaphoreRights);
            Console.WriteLine();
        }
    }
}

/*This code example produces output similar to following:

Current access rules:

        User: TestDomain\TestUser
        Type: Deny
      Rights: ChangePermissions

        User: TestDomain\TestUser
        Type: Allow
      Rights: Modify, Synchronize


Current access rules:

        User: TestDomain\TestUser
        Type: Deny
      Rights: ChangePermissions

        User: TestDomain\TestUser
        Type: Allow
      Rights: Modify, ReadPermissions, Synchronize
 */

Комментарии

Объект SemaphoreSecurity задает права доступа для именованного системного семафора, а также указывает, как проверяются попытки доступа. Права доступа к семафору выражаются в виде правил, причем каждое правило доступа представлено SemaphoreAccessRule объектом . Каждое правило аудита представлено SemaphoreAuditRule объектом .

Это отражает базовую систему безопасности Windows, в которой каждый защищаемый объект имеет не более одного списка управления доступом (DACL), который управляет доступом к защищенному объекту, и не более одного списка управления доступом системы (SACL), который указывает, какие попытки доступа проверяются. DACL и SACL — это упорядоченные списки записей управления доступом (ACE), которые определяют доступ и аудит для пользователей и групп. Объект SemaphoreAccessRule или SemaphoreAuditRule может представлять несколько объектов ACE.

Примечание

Объект Semaphore может представлять локальный семафор или именованный системный семафор. Безопасность управления доступом Windows имеет смысл только для именованных системных семафоров.

Классы SemaphoreSecurity, SemaphoreAccessRuleи SemaphoreAuditRule скрывают сведения о реализации списков управления доступом и ACE. Они позволяют игнорировать семнадцать различных типов ACE и сложность правильного наследования и распространения прав доступа. Эти объекты также предназначены для предотвращения следующих распространенных ошибок управления доступом:

  • Создание дескриптора безопасности с пустым DACL. Пустая ссылка на DACL позволяет любому пользователю добавлять правила доступа к объекту, что может привести к атаке типа "отказ в обслуживании". Новый SemaphoreSecurity объект всегда начинается с пустого DACL, который запрещает доступ всем пользователям.

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

  • Управление флагами дескриптора безопасности, которые должны находиться под контролем resource manager.

  • Создание недопустимых сочетаний флагов ACE.

  • Управление унаследованными ACE. Наследование и распространение обрабатываются диспетчером ресурсов в ответ на изменения, внесенные в правила доступа и аудита.

  • Вставка бессмысленных ACE в списки управления доступом.

Единственными возможностями, не поддерживаемыми объектами безопасности .NET, являются опасные действия, которые следует избегать большинству разработчиков приложений, например:

  • Низкоуровневые задачи, обычно выполняемые диспетчером ресурсов.

  • Добавление или удаление записей управления доступом способами, которые не поддерживают каноническое упорядочение.

Чтобы изменить безопасность управления доступом Windows для именованного семафора, используйте Semaphore.GetAccessControl метод для получения SemaphoreSecurity объекта . Измените объект безопасности, добавив и удалив правила, а затем используйте Semaphore.SetAccessControl метод , чтобы повторно подключить его.

Важно!

Изменения, внесенные в объект, SemaphoreSecurity не влияют на уровни доступа именованного семафора, пока вы не вызовете Semaphore.SetAccessControl метод для назначения измененного объекта безопасности именованного семафора.

Чтобы скопировать безопасность управления доступом из одного семафора в другой, используйте Semaphore.GetAccessControl метод для получения SemaphoreSecurity объекта, представляющего правила доступа и аудита для первого семафора, а затем используйте Semaphore.SetAccessControl метод или конструктор, принимаюющий SemaphoreSecurity объект , чтобы назначить эти правила второму семафору.

Пользователи с инвестициями в язык определения дескриптора безопасности (SDDL) могут использовать SetSecurityDescriptorSddlForm метод для задания правил доступа для именованного семафора, а GetSecurityDescriptorSddlForm метод — для получения строки, представляющей правила доступа в формате SDDL. Это не рекомендуется для новой разработки.

Конструкторы

SemaphoreSecurity()

Инициализирует новый экземпляр класса SemaphoreSecurity со значениями по умолчанию.

SemaphoreSecurity(String, AccessControlSections)

Инициализирует новый экземпляр класса SemaphoreSecurity с указанными разделами правил безопасности управления доступом из системного семафора с указанным именем.

Свойства

AccessRightType

Получает значение перечисления, используемое классом SemaphoreSecurity для обозначения прав доступа.

AccessRulesModified

Получает или задает логическое значение, которое указывает, изменены ли правила доступа, связанные с этим объектом ObjectSecurity.

(Унаследовано от ObjectSecurity)
AccessRuleType

Получает тип, используемый классом SemaphoreSecurity для обозначения правил доступа.

AreAccessRulesCanonical

Возвращает логическое значение, которое указывает, расположены ли правила доступа, связанные с этим объектом ObjectSecurity, в каноническом порядке.

(Унаследовано от ObjectSecurity)
AreAccessRulesProtected

Возвращает логическое значение, указывающее, защищен ли список разграничительного управления доступа (DACL), связанный с этим объектом ObjectSecurity.

(Унаследовано от ObjectSecurity)
AreAuditRulesCanonical

Возвращает логическое значение, которое указывает, расположены ли правила аудита, связанные с этим объектом ObjectSecurity, в каноническом порядке.

(Унаследовано от ObjectSecurity)
AreAuditRulesProtected

Возвращает логическое значение, указывающее, защищен ли системный список управления доступом (SACL), связанный с этим объектом ObjectSecurity.

(Унаследовано от ObjectSecurity)
AuditRulesModified

Получает или задает логическое значение, которое указывает, изменены ли правила аудита, связанные с этим объектом ObjectSecurity.

(Унаследовано от ObjectSecurity)
AuditRuleType

Получает тип, используемый классом SemaphoreSecurity для обозначения правил аудита.

GroupModified

Возвращает или задает логическое значение, указывающее, была ли изменена группа, связанная с защищаемым объектом.

(Унаследовано от ObjectSecurity)
IsContainer

Получает логическое значение, которое указывает, является ли данный объект ObjectSecurity контейнером.

(Унаследовано от ObjectSecurity)
IsDS

Получает логическое значение, указывающее, является ли этот объект ObjectSecurity объектом каталога.

(Унаследовано от ObjectSecurity)
OwnerModified

Получает или задает логическое значение, указывающее, был ли изменен владелец защищаемого объекта.

(Унаследовано от ObjectSecurity)
SecurityDescriptor

Возвращает дескриптор безопасности для данного экземпляра.

(Унаследовано от ObjectSecurity)

Методы

AccessRuleFactory(IdentityReference, Int32, Boolean, InheritanceFlags, PropagationFlags, AccessControlType)

Создает новое правило управления доступом для указанного пользователя с указанными правами, типом управления доступом и флагами.

AddAccessRule(AccessRule)

Добавляет указанное правило доступа в список управления доступом на уровне пользователей, связанный с данным объектом CommonObjectSecurity.

(Унаследовано от CommonObjectSecurity)
AddAccessRule(SemaphoreAccessRule)

Осуществляет поиск подходящего правила, с которым можно объединить новое правило. Если поиск не дал результатов, добавляется новое правило.

AddAuditRule(AuditRule)

Добавляет указанное правило аудита в системный список управления доступом, связанный с данным объектом CommonObjectSecurity.

(Унаследовано от CommonObjectSecurity)
AddAuditRule(SemaphoreAuditRule)

Осуществляет поиск правила аудита, с которым можно объединить новое правило. Если поиск не дал результатов, добавляется новое правило.

AuditRuleFactory(IdentityReference, Int32, Boolean, InheritanceFlags, PropagationFlags, AuditFlags)

Создает новое правило аудита, в котором указывается пользователь, к которому относится правило, правила доступа для аудита, а также событие, вызывающее срабатывание правила аудита.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetAccessRules(Boolean, Boolean, Type)

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

(Унаследовано от CommonObjectSecurity)
GetAuditRules(Boolean, Boolean, Type)

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

(Унаследовано от CommonObjectSecurity)
GetGroup(Type)

Получает основную группу, связанную с указанным владельцем.

(Унаследовано от ObjectSecurity)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetOwner(Type)

Возвращает владельца, связанного с указанной основной группой.

(Унаследовано от ObjectSecurity)
GetSecurityDescriptorBinaryForm()

Возвращает массив значений байтов, представляющих данные дескриптора безопасности для этого объекта ObjectSecurity.

(Унаследовано от ObjectSecurity)
GetSecurityDescriptorSddlForm(AccessControlSections)

Возвращает представление на языке определения дескриптора безопасности (SDDL) указанных разделов дескриптора безопасности, связанных с этим объектом ObjectSecurity.

(Унаследовано от ObjectSecurity)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
ModifyAccess(AccessControlModification, AccessRule, Boolean)

Применяет указанное изменение к списку управления доступом на уровне пользователей (DACL), связанному с этим объектом CommonObjectSecurity.

(Унаследовано от CommonObjectSecurity)
ModifyAccessRule(AccessControlModification, AccessRule, Boolean)

Применяет указанное изменение к списку управления доступом на уровне пользователей (DACL), связанному с этим объектом ObjectSecurity.

(Унаследовано от ObjectSecurity)
ModifyAudit(AccessControlModification, AuditRule, Boolean)

Применяет указанное изменение к системному списку управления доступом (SACL), связанному с этим объектом CommonObjectSecurity.

(Унаследовано от CommonObjectSecurity)
ModifyAuditRule(AccessControlModification, AuditRule, Boolean)

Применяет указанное изменение к системному списку управления доступом (SACL), связанному с этим объектом ObjectSecurity.

(Унаследовано от ObjectSecurity)
Persist(Boolean, String, AccessControlSections)

Сохраняет указанные разделы дескриптора безопасности, связанного с этим объектом ObjectSecurity, в постоянном хранилище. Рекомендуется, чтобы значения параметров includeSections, переданные в конструктор, и методы сохранения были идентичными.

(Унаследовано от ObjectSecurity)
Persist(SafeHandle, AccessControlSections)

Сохраняет указанные разделы дескриптора безопасности, связанного с этим объектом NativeObjectSecurity, в постоянном хранилище. Рекомендуется, чтобы значения параметров includeSections, переданные в конструктор и методы сохранения, были идентичными.

(Унаследовано от NativeObjectSecurity)
Persist(SafeHandle, AccessControlSections, Object)

Сохраняет указанные разделы дескриптора безопасности, связанного с этим объектом NativeObjectSecurity, в постоянном хранилище. Рекомендуется, чтобы значения параметров includeSections, переданные в конструктор, и методы сохранения были идентичными.

(Унаследовано от NativeObjectSecurity)
Persist(String, AccessControlSections)

Сохраняет указанные разделы дескриптора безопасности, связанного с этим объектом NativeObjectSecurity, в постоянном хранилище. Рекомендуется, чтобы значения параметров includeSections, переданные в конструктор, и методы сохранения были идентичными.

(Унаследовано от NativeObjectSecurity)
Persist(String, AccessControlSections, Object)

Сохраняет указанные разделы дескриптора безопасности, связанного с этим объектом NativeObjectSecurity, в постоянном хранилище. Рекомендуется, чтобы значения параметров includeSections, переданные в конструктор, и методы сохранения были идентичными.

(Унаследовано от NativeObjectSecurity)
PurgeAccessRules(IdentityReference)

Удаляет все правила доступа, связанные с указанным объектом IdentityReference.

(Унаследовано от ObjectSecurity)
PurgeAuditRules(IdentityReference)

Удаляет все правила, связанные с заданным IdentityReference.

(Унаследовано от ObjectSecurity)
ReadLock()

Блокирует этот объект ObjectSecurity для доступа для чтения.

(Унаследовано от ObjectSecurity)
ReadUnlock()

Разблокирует этот объект ObjectSecurity для доступа для чтения.

(Унаследовано от ObjectSecurity)
RemoveAccessRule(AccessRule)

Удаляет правила доступа с тем же идентификатором безопасности и маской доступа, что и у указанного правила доступа, из списка управления доступом на уровне пользователей, связанного с текущим объектом CommonObjectSecurity.

(Унаследовано от CommonObjectSecurity)
RemoveAccessRule(SemaphoreAccessRule)

Осуществляет поиск правила управления доступом с тем же именем пользователя и значением AccessControlType ("разрешить" или "запретить"), что и указанного правила, а также с совместимыми флагами наследования и распространения; если правило найдено, содержащиеся в указанном правиле доступа права удаляются.

RemoveAccessRuleAll(AccessRule)

Удаляет все правила доступа с тем же идентификатором безопасности, что и у указанного правила доступа, из списка управления доступом на уровне пользователей, связанного с текущим объектом CommonObjectSecurity.

(Унаследовано от CommonObjectSecurity)
RemoveAccessRuleAll(SemaphoreAccessRule)

Осуществляет поиск всех правил управления доступом с тем же именем пользователя и значением свойства AccessControlType ("разрешить" или "запретить"), что и у указанного правила, и удаляет найденные правила.

RemoveAccessRuleSpecific(AccessRule)

Удаляет все правила доступа, в точности совпадающие с указанным правилом доступа, из списка управления доступом на уровне пользователей, связанного с текущим объектом CommonObjectSecurity.

(Унаследовано от CommonObjectSecurity)
RemoveAccessRuleSpecific(SemaphoreAccessRule)

Осуществляет поиск правила управления доступом, в точности соответствующего указанному правилу, и удаляет найденное правило.

RemoveAuditRule(AuditRule)

Удаляет правила аудита с тем же идентификатором безопасности и маской доступа, что и у указанного правила аудита, из системного списка управления доступом, связанного с текущим объектом CommonObjectSecurity.

(Унаследовано от CommonObjectSecurity)
RemoveAuditRule(SemaphoreAuditRule)

Осуществляет поиск правила управления аудитом с тем же именем пользователя, что и указанного правила доступа, а также с совместимыми флагами наследования и распространения; если совместимое правило найдено, содержащиеся в указанном правиле права удаляются.

RemoveAuditRuleAll(AuditRule)

Удаляет все правила аудита с тем же идентификатором безопасности, что и у указанного правила аудита, из системного списка управления доступом, связанного с текущим объектом CommonObjectSecurity.

(Унаследовано от CommonObjectSecurity)
RemoveAuditRuleAll(SemaphoreAuditRule)

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

RemoveAuditRuleSpecific(AuditRule)

Удаляет все правила аудита, в точности совпадающие с указанным правилом аудита, из системного списка управления доступом, связанного с текущим объектом CommonObjectSecurity.

(Унаследовано от CommonObjectSecurity)
RemoveAuditRuleSpecific(SemaphoreAuditRule)

Осуществляет поиск правила аудита, в точности соответствующего указанному правилу, и удаляет найденное правило.

ResetAccessRule(AccessRule)

Удаляет все правила доступа из списка управления доступом на уровне пользователей (DACL), связанного с текущим объектом CommonObjectSecurity, а затем добавляет указанное правило доступа.

(Унаследовано от CommonObjectSecurity)
ResetAccessRule(SemaphoreAccessRule)

Удаляет все правила управления доступом с тем же именем пользователя, что и у указанного правила, вне зависимости от значения свойства AccessControlType, после чего добавляет указанное правило.

SetAccessRule(AccessRule)

Удаляет все правила доступа с тем же идентификатором и квалификатором безопасности, что и у указанного правила доступа, из списка управления доступом на уровне пользователей, связанного с текущим объектом CommonObjectSecurity, а затем добавляет указанное правило доступа.

(Унаследовано от CommonObjectSecurity)
SetAccessRule(SemaphoreAccessRule)

Удаляет все правила управления доступом с тем же именем пользователя и значением свойства AccessControlType ("разрешить" или "запретить"), что и у указанного правила, после чего добавляет указанное правило.

SetAccessRuleProtection(Boolean, Boolean)

Задает или удаляет защиту правил доступа, связанных с этим объектом ObjectSecurity. Защищенные правила доступа не могут изменяться родительскими объектами через наследование.

(Унаследовано от ObjectSecurity)
SetAuditRule(AuditRule)

Удаляет все правила аудита с тем же идентификатором и квалификатором безопасности, что и у указанного правила аудита, из системного списка управления доступом, связанного с текущим объектом CommonObjectSecurity, а затем добавляет указанное правило аудита.

(Унаследовано от CommonObjectSecurity)
SetAuditRule(SemaphoreAuditRule)

Удаляет все правила аудита с тем же именем пользователя, что и у указанного правила, вне зависимости от значения свойства AuditFlags, после чего добавляет указанное правило.

SetAuditRuleProtection(Boolean, Boolean)

Задает или удаляет защиту правил аудита, связанных с этим объектом ObjectSecurity. Защищенные правила аудита не могут изменяться родительскими объектами через наследование.

(Унаследовано от ObjectSecurity)
SetGroup(IdentityReference)

Задает основную группу для дескриптора безопасности, связанного с этим объектом ObjectSecurity.

(Унаследовано от ObjectSecurity)
SetOwner(IdentityReference)

Задает владельца для дескриптора безопасности, связанного с этим объектом ObjectSecurity.

(Унаследовано от ObjectSecurity)
SetSecurityDescriptorBinaryForm(Byte[])

Задает дескриптор безопасности для данного объекта ObjectSecurity из указанного массива байтовых значений.

(Унаследовано от ObjectSecurity)
SetSecurityDescriptorBinaryForm(Byte[], AccessControlSections)

Задает указанные разделы дескриптора безопасности для данного объекта ObjectSecurity из указанного массива байтовых значений.

(Унаследовано от ObjectSecurity)
SetSecurityDescriptorSddlForm(String)

Задает дескриптор безопасности для данного объекта ObjectSecurity из указанной строки языка определения дескрипторов безопасности (SDDL).

(Унаследовано от ObjectSecurity)
SetSecurityDescriptorSddlForm(String, AccessControlSections)

Задает указанные разделы дескриптора безопасности для данного объекта ObjectSecurity из указанной строки языка определения дескрипторов безопасности (SDDL).

(Унаследовано от ObjectSecurity)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)
WriteLock()

Блокирует доступ к этому объекту ObjectSecurity для записи.

(Унаследовано от ObjectSecurity)
WriteUnlock()

Разблокирует этот объект ObjectSecurity для доступа для записи.

(Унаследовано от ObjectSecurity)

Применяется к

Продукт Версии
.NET Core 1.0, Core 1.1, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9

См. также раздел