보안 설명자 관리
개체의 특성을 수정하여 모든 작업을 수행할 수 있는 것은 아닙니다. 경우에 따라 개체의 보안 설명자를 수정해야 할 때도 있습니다. 예를 들어, 기본적으로 일반 사용자는 대부분의 특성을 읽을 수 있지만 해당 특성을 수정할 수는 없습니다. 사용자가 자신들의 전화 번호를 읽고 쓸 수 있도록 허용하려고 할 수도 있습니다. 이 작업은 ACE(액세스 제어 항목)를 사용자 개체의 DACL(임의 액세스 제어 목록)에 추가하여 수행됩니다. 이 ACE는 허용 ACE로, telephoneNumber 속성에 대한 쓰기 권한을 허용합니다. telephoneNumber 속성에 대한 자세한 내용은 MSDN Library(https://go.microsoft.com/fwlink/?LinkID=27252)의 telephoneNumber 항목 또는 Telephone-Number 항목을 참조하십시오.
버전 1.0 및 1.1의 .NET Framework에서는 기본적으로 Active Directory 개체의 보안 설명자 수정을 지원하지 않습니다. Active Directory 개체의 보안 설명자는 ADSI를 호출하고 IADsSecurityDescriptor 및 관련된 인터페이스를 사용하여 조작될 수 있습니다. 자세한 내용은 ADSI 호출를 참조하십시오. IADsSecurityDescriptor 인터페이스에 대한 자세한 내용은 MSDN Library(https://go.microsoft.com/fwlink/?LinkID=27252)의 IADsSecurityDescriptor 항목을 참조하십시오.
.NET Framework 2.0의 System.DirectoryServices 네임스페이스에는 ADSI를 호출하지 않고 보안 설명자를 조작할 수 있는 여러 클래스가 포함됩니다. Active Directory 개체 보안 설명자와 함께 사용되는 기본 클래스는 ActiveDirectorySecurity입니다. ObjectSecurity 속성이 있는 Active Directory 개체의 보안 설명자를 나타내는 ActiveDirectorySecurity 개체를 가져올 수 있습니다.
ActiveDirectorySecurity 클래스에는 읽고 수정할 개체의 임의 액세스 제어 목록 및 보조 액세스 제어 목록을 허용하는 메서드 및 속성이 있습니다.
임의 액세스 제어 목록의 액세스 제어 항목을 액세스 규칙이라고 합니다. 액세스 규칙을 나타내는 기본 클래스는 ActiveDirectoryAccessRule 클래스입니다. ActiveDirectoryAccessRule 클래스에서 파생되고 특정 형식의 액세스 규칙을 나타내는 데 사용되는 클래스도 여러 개 있습니다. 다음 표에서는 이러한 특정 클래스 및 해당 클래스의 사용법에 대해 보여 줍니다.
클래스 | 사용법 |
---|---|
Active Directory 개체에 자식 개체를 만들 권한을 허용하거나 거부하는 데 사용되는 액세스 규칙을 나타냅니다. |
|
Active Directory 개체에 자식 개체를 삭제할 권한을 허용하거나 거부하는 데 사용되는 액세스 규칙을 나타냅니다. |
|
Active Directory 개체에 모든 자식 개체를 삭제할 권한을 허용하거나 거부하는 데 사용되는 액세스 규칙을 나타냅니다. |
|
Active Directory 개체에 확장 권한을 허용하거나 거부하는 데 사용되는 액세스 규칙을 나타냅니다. |
|
Active Directory 개체에 자식 개체를 나열할 권한을 허용하거나 거부하는 데 사용되는 액세스 규칙을 나타냅니다. |
|
Active Directory 속성에 대한 액세스를 허용하거나 거부하는 데 사용되는 액세스 규칙을 나타냅니다. |
|
Active Directory 속성 집합에 대한 액세스를 허용하거나 거부하는 데 사용되는 액세스 규칙을 나타냅니다. |
시스템 액세스 제어 목록의 액세스 제어 항목을 ActiveDirectoryAuditRule 클래스로 표시되는 감사 규칙이라고 합니다.
대부분의 경우 액세스 규칙을 각각의 개별 개체에 추가하여 대상에 대한 액세스를 허용하거나 거부하지 않는 것이 좋습니다. 이러한 경우 컨테이너의 보안 설명자를 수정하고 액세스 규칙을 상속할 수 있도록 설정하는 것이 좋습니다. 이렇게 하면 새 개체를 만들 때 적절한 사용 권한을 자동으로 가져옵니다. 위에서 설명한 telephoneNumber 예제에서 사용자의 전화 번호에 대한 모든 해당 사용자의 쓰기 권한을 허용할 수도 있습니다. 가장 쉬운 방법은 상속 가능한 액세스 규칙을 조직 구성 단위와 같은 컨테이너에 추가하고 조직 구성 단위에 모든 사용자를 배치하는 것입니다. 다음 코드 예제에서는 이 작업을 수행하는 방법을 보여 줍니다.
예제
다음 Visual Basic .NET 예제에서는 telephoneNumber 속성에 대한 사용자 개체의 쓰기 권한인 모든 컨테이너의 자식을 제공하는 컨테이너에 액세스 규칙을 추가하는 방법을 보여 줍니다. telephoneNumber 속성에 대한 자세한 내용은 MSDN Library(https://go.microsoft.com/fwlink/?LinkID=27252)의 telephoneNumber 항목 또는 Telephone-Number 항목을 참조하십시오.
Sub SetWritePhonePermission(ByVal container As DirectoryEntry)
Try
' Get the ActiveDirectorySecurity for the container.
Dim containerSecurity As ActiveDirectorySecurity
containerSecurity = container.ObjectSecurity
' Create a SecurityIdentifier object for "self".
Dim selfSid As New SecurityIdentifier(WellKnownSidType.SelfSid, _
Nothing)
' Get the schema for the currently logged on user.
Dim schema As ActiveDirectorySchema
schema = ActiveDirectorySchema.GetCurrentSchema()
' Get the telephoneNumber schema property object.
Dim phoneProperty As ActiveDirectorySchemaProperty
phoneProperty = schema.FindProperty("telephoneNumber")
' Get the user schema class object.
Dim userClass As ActiveDirectorySchemaClass
userClass = schema.FindClass("user")
' Create a property access rule to allow a user to write to their own telephoneNumber property.
Dim allowWritePhoneRule As New PropertyAccessRule(selfSid, _
AccessControlType.Allow, _
PropertyAccess.Write, _
phoneProperty.SchemaGuid, _
ActiveDirectorySecurityInheritance.Descendents, _
userClass.SchemaGuid)
' Add the access rule to the DACL.
container.ObjectSecurity.AddAccessRule(allowWritePhoneRule)
' Commit the changes.
container.CommitChanges()
Catch notFoundEx As ActiveDirectoryObjectNotFoundException
' The schema class or property could not be found.
End Try
End Sub 'SetWritePhonePermission
다음 C# 예제에서는 telephoneNumber 속성에 대한 사용자 개체의 쓰기 권한인 모든 컨테이너의 자식을 제공하는 컨테이너에 액세스 규칙을 추가하는 방법을 보여 줍니다. telephoneNumber 속성에 대한 자세한 내용은 MSDN Library(https://go.microsoft.com/fwlink/?LinkID=27252)의 telephoneNumber 항목 또는 Telephone-Number 항목을 참조하십시오.
static void SetWritePhonePermission(DirectoryEntry container)
{
try
{
// Get the ActiveDirectorySecurity for the container.
ActiveDirectorySecurity containerSecurity = container.ObjectSecurity;
// Create a SecurityIdentifier object for "self".
SecurityIdentifier selfSid =
new SecurityIdentifier(WellKnownSidType.SelfSid, null);
// Get the schema for the currently logged on user.
ActiveDirectorySchema schema = ActiveDirectorySchema.GetCurrentSchema();
// Get the telephoneNumber schema property object.
ActiveDirectorySchemaProperty phoneProperty = schema.FindProperty("telephoneNumber");
// Get the user schema class object.
ActiveDirectorySchemaClass userClass = schema.FindClass("user");
// Create a property access rule to allow a user to write to their own telephoneNumber property.
PropertyAccessRule allowWritePhoneRule =
new PropertyAccessRule(
selfSid,
AccessControlType.Allow,
PropertyAccess.Write,
phoneProperty.SchemaGuid,
ActiveDirectorySecurityInheritance.Descendents,
userClass.SchemaGuid);
// Add the access rule to the DACL.
container.ObjectSecurity.AddAccessRule(allowWritePhoneRule);
// Commit the changes.
container.CommitChanges();
}
catch (ActiveDirectoryObjectNotFoundException)
{
// The schema class or property could not be found.
}
}
참고 항목
참조
System.DirectoryServices
ActiveDirectorySecurity
ActiveDirectoryAccessRule
ActiveDirectoryAuditRule
개념
Send comments about this topic to Microsoft.
Copyright © 2007 by Microsoft Corporation. All rights reserved.