개체에 대한 액세스 권한 설정

ADSI COM 개체 IADsSecurityDescriptor (보안 설명자), IADsAccessControlList (DACLs 및 SACL) 및 ACE(IADsAccessControlEntry )를 사용하여 ACL에 ACE를 추가하는 경우 속성 캐시에 지정된 개체의 nTSecurityDescriptor 속성을 변경합니다. 즉, 속성 캐시에서 디렉터리에 업데이트된 보안 설명자를 쓰려면 새 ACE 및 IADs.SetInfo 메서드를 포함하는 개체에 메서드를 배치해야 합니다.

자세한 내용과 Active Directory Domain Services 개체에 ACE를 설정하는 코드 예제는 디렉터리 개체에서 ACE 설정 예제를 참조하세요.

다음 일반 프로세스를 사용하여 액세스 권한에 대한 ACE를 만들고 개체의 DACL에서 해당 ACE를 설정합니다.

  1. 개체에 대한 IADs 인터페이스 포인터를 가져옵니다.

  2. IADs.Get 메서드를 사용하여 개체의 보안 설명자를 가져옵니다. 보안 설명자를 포함하는 속성의 이름은 nTSecurityDescriptor입니다. 속성은 IDispatch 포인터를 포함하는 VARIANT로 반환됩니다(vt 멤버가 VT_DISPATCH). 해당 IDispatch 포인터에서 QueryInterface를 호출하여 IADsSecurityDescriptor 인터페이스를 가져와 해당 인터페이스의 메서드를 사용하여 보안 설명자의 ACL에 액세스합니다.

  3. IADsSecurityDescriptor.DiscretionaryAcl 속성을 사용하여 DACL을 가져옵니다. 메서드는 IDispatch 포인터를 반환합니다. 해당 IDispatch 포인터에서 QueryInterface를 호출하여 IADsAccessControlList 인터페이스를 가져와 해당 인터페이스의 메서드를 사용하여 ACL의 개별 API에 액세스합니다.

  4. CoCreateInstance를 사용하여 새 ACE에 대한 ADSI COM 개체를 만들고 해당 개체에 대한 IADsAccessControlEntry 인터페이스 포인터를 가져옵니다. 클래스 ID가 CLSID_AccessControlEntry.

  5. IADsAccessControlEntry 메서드를 사용하여 ACE의 속성을 설정합니다.

    1. IADsAccessControlEntry::p ut_Trustee를 사용하여 이 ACE가 적용되는 트러스티를 설정합니다. 트러스티는 사용자, 그룹 또는 기타 보안 주체입니다. 애플리케이션은 ACE를 적용하려는 트러스티의 사용자 또는 그룹 개체에서 적절한 속성의 값을 사용해야 합니다. 트러스티는 BSTR 로 지정되며 다음 양식을 사용할 수 있습니다.
      • 도메인 계정(이전 버전의 Windows NT 사용된 로그온 이름)은 "<domain\<user account>" 형식입니다. 여기서 "<domain>>"은 사용자를 포함하는 Windows NT 도메인의 이름이고 "<사용자 계정>"은 지정된 사용자의 sAMAccountName 속성입니다. 예: "fabrikam\jeffsmith".
      • 모든 사용자, 로컬 시스템, 주체 자체, 인증된 사용자, 작성자 소유자 등과 같은 Windows NT 보안 시스템에서 정의한 특수 ID를 나타내는 잘 알려진 보안 주체입니다. 잘 알려진 보안 주체를 나타내는 개체는 구성 컨테이너 아래의 잘 알려진 보안 주체 컨테이너에 저장됩니다. 예를 들어 익명 로그온입니다.
      • Windows NT 보안 시스템에서 정의한 기본 제공 사용자 그룹을 나타내는 기본 제공 그룹입니다. "GROUP name"은 기본 제공 사용자 그룹의 이름>인 "<BUILTIN\<group name>" 형식입니다. 기본 제공 그룹을 나타내는 개체는 도메인 컨테이너 아래의 Builtin 컨테이너에 저장됩니다. 예를 들어 "BUILTIN\Administrators"입니다.
      • 지정된 사용자의 SID(문자열 형식)로, 지정된 사용자의 objectSID 속성입니다. Win32 보안 API ConvertSidToStringSid 함수를 사용하여 문자열 형식으로 변환할 수 있습니다. 예: "S-1-5-32-548".
    2. IADsAccessControlEntry.AccessMask 속성을 사용하여 액세스 권한을 지정하는 마스크를 설정합니다. ADS_RIGHTS_ENUM 열거형은 디렉터리 개체에서 설정할 수 있는 액세스 권한을 지정합니다.
    3. IADsAccessControlEntry.AceType 속성을 사용하여 AccessMask에서 설정한 액세스 권한을 허용할지 거부할지 여부를 지정합니다. 표준 권한의 경우 ADS_ACETYPE_ACCESS_ALLOWED 또는 ADS_ACETYPE_ACCESS_DENIED 수 있습니다. 개체별 권한(개체의 특정 부분 또는 특정 형식의 개체에 적용되는 권한)의 경우 ADS_ACETYPE_ACCESS_ALLOWED_OBJECT 또는 ADS_ACETYPE_ACCESS_DENIED_OBJECT 사용합니다. ADS_ACETYPE_ENUM 열거형은 ACE에서 설정할 수 있는 액세스 유형을 지정합니다.
    4. IADsAccessControlEntry.AceFlags 속성을 사용하여 지정된 개체 아래에 있는 다른 컨테이너 또는 개체가 ACE를 상속할 수 있는지 여부를 지정합니다. ADS_ACEFLAG_ENUM 열거형은 ACE에서 설정할 수 있는 상속 플래그를 지정합니다.
    5. IADsAccessControlEntry.Flags 속성을 사용하여 오른쪽이 개체의 특정 부분, 상속된 개체 형식 또는 둘 다에 적용되는지 여부를 지정합니다.
    6. FlagsADS_FLAG_OBJECT_TYPE_PRESENT 설정된 경우 IADsAccessControlEntry.ObjectType 속성을 설정합니다. o 개체 클래스의 GUID(ADS_RIGHT_DS_CREATE_CHILD 또는 ADS_RIGHT_DS_DELETE_CHILD), 속성, 속성 집합, 유효성이 검사된 쓰기 또는 ACE가 적용되는 확장된 권한을 포함하는 문자열을 지정합니다. GUID는 COM 라이브러리의 StringFromGUID2 함수에 의해 생성된 폼의 문자열로 지정되어야 합니다.
    7. FlagsADS_FLAG_INHERITED_OBJECT_TYPE_PRESENT 설정된 경우 IADsAccessControlEntry.InheritedObjectType 속성을 설정하여 ACE가 적용되는 상속된 개체 클래스의 GUID를 포함하는 문자열을 지정합니다. GUID는 COM 라이브러리의 StringFromGUID2 함수에 의해 생성된 폼의 문자열로 지정되어야 합니다.
  6. IADsAccessControlEntry 개체에서 QueryInterface 메서드를 사용하여 IDispatch 포인터를 가져옵니다. IADsAccessControlList.AddAce 메서드에는 ACE에 대한 IDispatch 인터페이스 포인터가 필요합니다.

  7. IADsAccessControlList.AddAce를 사용하여 DACL에 새 ACE를 추가합니다. ACL 내의 AES 순서는 개체에 대한 액세스 평가에 영향을 줄 수 있습니다. 개체에 올바르게 액세스하려면 새 ACL을 만들고, 기존 ACL의 ACL을 새 ACL에 올바른 순서로 추가한 다음, 보안 설명자의 기존 ACL을 새 ACL로 바꿔야 할 수 있습니다. 자세한 내용은 DACL의 ACE 순서를 참조하세요.

  8. IADsSecurityDescriptor.DiscretionaryAcl 속성을 사용하여 새 ACE가 포함된 DACL을 보안 설명자에 작성합니다. DACL에 대한 자세한 내용은 Null DACL 및 빈 DACL을 참조하세요.

  9. IADs.Put 메서드를 사용하여 개체의 nTSecurityDescriptor 속성에 보안 설명자를 속성 캐시에 씁니다.

  10. IADs.SetInfo 메서드를 사용하여 디렉터리의 개체에 대한 속성을 업데이트합니다.