SemaphoreSecurity Класс
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Обеспечивает безопасность управления доступом Windows для именованного семафора. Этот класс не наследуется.
public ref class SemaphoreSecurity sealed : System::Security::AccessControl::NativeObjectSecurity
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
type SemaphoreSecurity = class
inherit NativeObjectSecurity
[<System.Security.SecurityCritical>]
type SemaphoreSecurity = class
inherit NativeObjectSecurity
[<System.Runtime.InteropServices.ComVisible(false)>]
type SemaphoreSecurity = class
inherit NativeObjectSecurity
Public NotInheritable Class SemaphoreSecurity
Inherits 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
*/
Imports System.Threading
Imports System.Security.AccessControl
Imports System.Security.Principal
Public Class Example
Public Shared Sub Main()
' Create a string representing the current user.
Dim user As String = Environment.UserDomainName _
& "\" & Environment.UserName
' Create a security object that grants no access.
Dim mSec As New SemaphoreSecurity()
' Add a rule that grants the current user the
' right to enter or release the semaphore.
Dim rule As New SemaphoreAccessRule(user, _
SemaphoreRights.Synchronize _
Or 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)
End Sub
Private Shared Sub ShowSecurity(ByVal security As SemaphoreSecurity)
Console.WriteLine(vbCrLf & "Current access rules:" & vbCrLf)
For Each ar As SemaphoreAccessRule In _
security.GetAccessRules(True, True, GetType(NTAccount))
Console.WriteLine(" User: {0}", ar.IdentityReference)
Console.WriteLine(" Type: {0}", ar.AccessControlType)
Console.WriteLine(" Rights: {0}", ar.SemaphoreRights)
Console.WriteLine()
Next
End Sub
End Class
'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. Это не рекомендуется для новой разработки.
Semaphore |
Инициализирует новый экземпляр класса SemaphoreSecurity со значениями по умолчанию. |
Semaphore |
Инициализирует новый экземпляр класса SemaphoreSecurity с указанными разделами правил безопасности управления доступом из системного семафора с указанным именем. |
Access |
Получает значение перечисления, используемое классом SemaphoreSecurity для обозначения прав доступа. |
Access |
Получает или задает логическое значение, которое указывает, изменены ли правила доступа, связанные с этим объектом ObjectSecurity. (Унаследовано от ObjectSecurity) |
Access |
Получает тип, используемый классом SemaphoreSecurity для обозначения правил доступа. |
Are |
Возвращает логическое значение, которое указывает, расположены ли правила доступа, связанные с этим объектом ObjectSecurity, в каноническом порядке. (Унаследовано от ObjectSecurity) |
Are |
Возвращает логическое значение, указывающее, защищен ли список разграничительного управления доступа (DACL), связанный с этим объектом ObjectSecurity. (Унаследовано от ObjectSecurity) |
Are |
Возвращает логическое значение, которое указывает, расположены ли правила аудита, связанные с этим объектом ObjectSecurity, в каноническом порядке. (Унаследовано от ObjectSecurity) |
Are |
Возвращает логическое значение, указывающее, защищен ли системный список управления доступом (SACL), связанный с этим объектом ObjectSecurity. (Унаследовано от ObjectSecurity) |
Audit |
Получает или задает логическое значение, которое указывает, изменены ли правила аудита, связанные с этим объектом ObjectSecurity. (Унаследовано от ObjectSecurity) |
Audit |
Получает тип, используемый классом SemaphoreSecurity для обозначения правил аудита. |
Group |
Возвращает или задает логическое значение, указывающее, была ли изменена группа, связанная с защищаемым объектом. (Унаследовано от ObjectSecurity) |
Is |
Получает логическое значение, которое указывает, является ли данный объект ObjectSecurity контейнером. (Унаследовано от ObjectSecurity) |
IsDS |
Получает логическое значение, указывающее, является ли этот объект ObjectSecurity объектом каталога. (Унаследовано от ObjectSecurity) |
Owner |
Получает или задает логическое значение, указывающее, был ли изменен владелец защищаемого объекта. (Унаследовано от ObjectSecurity) |
Security |
Возвращает дескриптор безопасности для данного экземпляра. (Унаследовано от ObjectSecurity) |
Access |
Создает новое правило управления доступом для указанного пользователя с указанными правами, типом управления доступом и флагами. |
Add |
Добавляет указанное правило доступа в список управления доступом на уровне пользователей, связанный с данным объектом CommonObjectSecurity. (Унаследовано от CommonObjectSecurity) |
Add |
Осуществляет поиск подходящего правила, с которым можно объединить новое правило. Если поиск не дал результатов, добавляется новое правило. |
Add |
Добавляет указанное правило аудита в системный список управления доступом, связанный с данным объектом CommonObjectSecurity. (Унаследовано от CommonObjectSecurity) |
Add |
Осуществляет поиск правила аудита, с которым можно объединить новое правило. Если поиск не дал результатов, добавляется новое правило. |
Audit |
Создает новое правило аудита, в котором указывается пользователь, к которому относится правило, правила доступа для аудита, а также событие, вызывающее срабатывание правила аудита. |
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
Get |
Получает коллекцию правил доступа, связанных с указанным идентификатором безопасности. (Унаследовано от CommonObjectSecurity) |
Get |
Получает коллекцию правил аудита, связанных с указанным идентификатором безопасности. (Унаследовано от CommonObjectSecurity) |
Get |
Получает основную группу, связанную с указанным владельцем. (Унаследовано от ObjectSecurity) |
Get |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
Get |
Возвращает владельца, связанного с указанной основной группой. (Унаследовано от ObjectSecurity) |
Get |
Возвращает массив значений байтов, представляющих данные дескриптора безопасности для этого объекта ObjectSecurity. (Унаследовано от ObjectSecurity) |
Get |
Возвращает представление на языке определения дескриптора безопасности (SDDL) указанных разделов дескриптора безопасности, связанных с этим объектом ObjectSecurity. (Унаследовано от ObjectSecurity) |
Get |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
Memberwise |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
Modify |
Применяет указанное изменение к списку управления доступом на уровне пользователей (DACL), связанному с этим объектом CommonObjectSecurity. (Унаследовано от CommonObjectSecurity) |
Modify |
Применяет указанное изменение к списку управления доступом на уровне пользователей (DACL), связанному с этим объектом ObjectSecurity. (Унаследовано от ObjectSecurity) |
Modify |
Применяет указанное изменение к системному списку управления доступом (SACL), связанному с этим объектом CommonObjectSecurity. (Унаследовано от CommonObjectSecurity) |
Modify |
Применяет указанное изменение к системному списку управления доступом (SACL), связанному с этим объектом ObjectSecurity. (Унаследовано от ObjectSecurity) |
Persist(Boolean, String, Access |
Сохраняет указанные разделы дескриптора безопасности, связанного с этим объектом ObjectSecurity, в постоянном хранилище. Рекомендуется, чтобы значения параметров |
Persist(Safe |
Сохраняет указанные разделы дескриптора безопасности, связанного с этим объектом NativeObjectSecurity, в постоянном хранилище. Рекомендуется, чтобы значения параметров |
Persist(Safe |
Сохраняет указанные разделы дескриптора безопасности, связанного с этим объектом NativeObjectSecurity, в постоянном хранилище. Рекомендуется, чтобы значения параметров |
Persist(String, Access |
Сохраняет указанные разделы дескриптора безопасности, связанного с этим объектом NativeObjectSecurity, в постоянном хранилище. Рекомендуется, чтобы значения параметров |
Persist(String, Access |
Сохраняет указанные разделы дескриптора безопасности, связанного с этим объектом NativeObjectSecurity, в постоянном хранилище. Рекомендуется, чтобы значения параметров |
Purge |
Удаляет все правила доступа, связанные с указанным объектом IdentityReference. (Унаследовано от ObjectSecurity) |
Purge |
Удаляет все правила, связанные с заданным IdentityReference. (Унаследовано от ObjectSecurity) |
Read |
Блокирует этот объект ObjectSecurity для доступа для чтения. (Унаследовано от ObjectSecurity) |
Read |
Разблокирует этот объект ObjectSecurity для доступа для чтения. (Унаследовано от ObjectSecurity) |
Remove |
Удаляет правила доступа с тем же идентификатором безопасности и маской доступа, что и у указанного правила доступа, из списка управления доступом на уровне пользователей, связанного с текущим объектом CommonObjectSecurity. (Унаследовано от CommonObjectSecurity) |
Remove |
Осуществляет поиск правила управления доступом с тем же именем пользователя и значением AccessControlType ("разрешить" или "запретить"), что и указанного правила, а также с совместимыми флагами наследования и распространения; если правило найдено, содержащиеся в указанном правиле доступа права удаляются. |
Remove |
Удаляет все правила доступа с тем же идентификатором безопасности, что и у указанного правила доступа, из списка управления доступом на уровне пользователей, связанного с текущим объектом CommonObjectSecurity. (Унаследовано от CommonObjectSecurity) |
Remove |
Осуществляет поиск всех правил управления доступом с тем же именем пользователя и значением свойства AccessControlType ("разрешить" или "запретить"), что и у указанного правила, и удаляет найденные правила. |
Remove |
Удаляет все правила доступа, в точности совпадающие с указанным правилом доступа, из списка управления доступом на уровне пользователей, связанного с текущим объектом CommonObjectSecurity. (Унаследовано от CommonObjectSecurity) |
Remove |
Осуществляет поиск правила управления доступом, в точности соответствующего указанному правилу, и удаляет найденное правило. |
Remove |
Удаляет правила аудита с тем же идентификатором безопасности и маской доступа, что и у указанного правила аудита, из системного списка управления доступом, связанного с текущим объектом CommonObjectSecurity. (Унаследовано от CommonObjectSecurity) |
Remove |
Осуществляет поиск правила управления аудитом с тем же именем пользователя, что и указанного правила доступа, а также с совместимыми флагами наследования и распространения; если совместимое правило найдено, содержащиеся в указанном правиле права удаляются. |
Remove |
Удаляет все правила аудита с тем же идентификатором безопасности, что и у указанного правила аудита, из системного списка управления доступом, связанного с текущим объектом CommonObjectSecurity. (Унаследовано от CommonObjectSecurity) |
Remove |
Производит поиск всех правил аудита с тем же пользователем, что и у указанного правила, и удаляет найденные правила. |
Remove |
Удаляет все правила аудита, в точности совпадающие с указанным правилом аудита, из системного списка управления доступом, связанного с текущим объектом CommonObjectSecurity. (Унаследовано от CommonObjectSecurity) |
Remove |
Осуществляет поиск правила аудита, в точности соответствующего указанному правилу, и удаляет найденное правило. |
Reset |
Удаляет все правила доступа из списка управления доступом на уровне пользователей (DACL), связанного с текущим объектом CommonObjectSecurity, а затем добавляет указанное правило доступа. (Унаследовано от CommonObjectSecurity) |
Reset |
Удаляет все правила управления доступом с тем же именем пользователя, что и у указанного правила, вне зависимости от значения свойства AccessControlType, после чего добавляет указанное правило. |
Set |
Удаляет все правила доступа с тем же идентификатором и квалификатором безопасности, что и у указанного правила доступа, из списка управления доступом на уровне пользователей, связанного с текущим объектом CommonObjectSecurity, а затем добавляет указанное правило доступа. (Унаследовано от CommonObjectSecurity) |
Set |
Удаляет все правила управления доступом с тем же именем пользователя и значением свойства AccessControlType ("разрешить" или "запретить"), что и у указанного правила, после чего добавляет указанное правило. |
Set |
Задает или удаляет защиту правил доступа, связанных с этим объектом ObjectSecurity. Защищенные правила доступа не могут изменяться родительскими объектами через наследование. (Унаследовано от ObjectSecurity) |
Set |
Удаляет все правила аудита с тем же идентификатором и квалификатором безопасности, что и у указанного правила аудита, из системного списка управления доступом, связанного с текущим объектом CommonObjectSecurity, а затем добавляет указанное правило аудита. (Унаследовано от CommonObjectSecurity) |
Set |
Удаляет все правила аудита с тем же именем пользователя, что и у указанного правила, вне зависимости от значения свойства AuditFlags, после чего добавляет указанное правило. |
Set |
Задает или удаляет защиту правил аудита, связанных с этим объектом ObjectSecurity. Защищенные правила аудита не могут изменяться родительскими объектами через наследование. (Унаследовано от ObjectSecurity) |
Set |
Задает основную группу для дескриптора безопасности, связанного с этим объектом ObjectSecurity. (Унаследовано от ObjectSecurity) |
Set |
Задает владельца для дескриптора безопасности, связанного с этим объектом ObjectSecurity. (Унаследовано от ObjectSecurity) |
Set |
Задает дескриптор безопасности для данного объекта ObjectSecurity из указанного массива байтовых значений. (Унаследовано от ObjectSecurity) |
Set |
Задает указанные разделы дескриптора безопасности для данного объекта ObjectSecurity из указанного массива байтовых значений. (Унаследовано от ObjectSecurity) |
Set |
Задает дескриптор безопасности для данного объекта ObjectSecurity из указанной строки языка определения дескрипторов безопасности (SDDL). (Унаследовано от ObjectSecurity) |
Set |
Задает указанные разделы дескриптора безопасности для данного объекта ObjectSecurity из указанной строки языка определения дескрипторов безопасности (SDDL). (Унаследовано от ObjectSecurity) |
To |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
Write |
Блокирует доступ к этому объекту ObjectSecurity для записи. (Унаследовано от ObjectSecurity) |
Write |
Разблокирует этот объект 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 |
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв: