DsWriteAccountSpnA 함수(ntdsapi.h)
DsWriteAccountSpn 함수는 Active Directory Domain Services에서 지정된 사용자 또는 컴퓨터 계정 개체의 servicePrincipalName 특성에 SPN(서비스 사용자 이름) 배열을 씁니다. 함수는 SPN을 등록하거나 등록 취소할 수 있습니다.
통사론
NTDSAPI DWORD DsWriteAccountSpnA(
[in] HANDLE hDS,
[in] DS_SPN_WRITE_OP Operation,
[in] LPCSTR pszAccount,
[in] DWORD cSpn,
[in] LPCSTR *rpszSpn
);
매개 변수
[in] hDS
DSBind 또는 DSBindWithCred 함수에서 가져온 디렉터리 서비스 핸들을 포함합니다.
[in] Operation
DsWriteAccountSpn 수행할 작업을 지정하는 DS_SPN_WRITE_OP 값 중 하나를 포함합니다.
[in] pszAccount
Active Directory Domain Services에서 사용자 또는 컴퓨터 개체의 고유 이름을 지정하는 null로 끝나는 상수 문자열에 대한 포인터입니다. 호출자는 이 개체의 servicePrincipalName 속성에 대한 쓰기 권한이 있어야 합니다.
[in] cSpn
rpszSpnSPN 수를 지정합니다. 이 값이 0이고 operation
[in] rpszSpn
pszAccount 매개 변수로 식별된 계정에서 추가하거나 제거할 SPN을 지정하는 null로 끝나는 상수 문자열 배열에 대한 포인터입니다. DsGetSpn 함수는 서비스에 대한 SPN을 작성하는 데 사용됩니다.
반환 값
성공하면 ERROR_SUCCESS 반환하고, 성공하지 못한 경우 Win32, RPC 또는 디렉터리 서비스 오류를 반환합니다.
발언
DsWriteAccountSpn 함수는 하나 이상의 서비스 인스턴스에 대한 SPN을 등록합니다. SPN은 클라이언트에서 신뢰할 수 있는 인증 서비스와 함께 서비스를 인증하는 데 사용됩니다. 애플리케이션 또는 서비스가 일부 다른 서비스를 식별하는 SPN을 부정하게 등록하는 보안 공격으로부터 보호하기 위해 사용자 및 컴퓨터 계정의 기본 DACL을 사용하면 도메인 관리자만 대부분의 경우 SPN을 등록할 수 있습니다.
이 규칙의 한 가지 예외는 LocalSystem 계정으로 실행되는 서비스가 DsWriteAccountSpn 호출하여 SPN에 지정된 호스트가 서비스가 실행 중인 컴퓨터의 DNS 또는 NetBIOS 이름인 경우 "ServiceClass/Host:Port" 형식의 간단한 SPN을 등록할 수 있다는 것입니다.
또 다른 예외는 컴퓨터 계정의 기본 DACL을 통해 호출자가 특정 제약 조건에 따라 자체에 SPN을 등록할 수 있다는 것입니다. 예를 들어 컴퓨터 계정에는 "host/<computername>" 형식의 컴퓨터 이름을 기준으로 SPN이 있을 수 있습니다. 컴퓨터 이름은 SPN에 포함되어 있으므로 SPN을 사용할 수 있습니다.
DSA가 SPN을 작성할 수 있도록 구성된 경우에는 위의 규칙이 적용되지 않습니다. 그러나 이렇게 하면 보안이 감소하므로 권장되지 않습니다.
DsWriteAccountSpn 전달된 SPN은 실제로 pszAccount컴퓨터 개체의 Service-Principal-Name 특성에 추가됩니다. 이 호출은 계정 개체가 저장된 도메인 컨트롤러에 RPC를 사용하여 수행되므로 계정에서 허용되는 SPN에 대한 정책을 안전하게 적용할 수 있습니다. LDAP를 사용하여 SPN 속성에 직접 쓸 수 없습니다. 모든 쓰기는 이 RPC 호출을 통해 제공되어야 합니다. LDAP를 사용하는 읽기는 허용됩니다.
SPN을 설정하는 데 필요한 권한
계정에 임의의 SPN을 작성하려면 작성기에 "ServicePrincipalName 쓰기" 권한이 필요하며, 이 권한은 계정을 만든 사람에게 기본적으로 부여되지 않습니다. 해당 사용자에게는 '유효성이 검사된 SPN 쓰기' 권한이 있습니다(컴퓨터 계정에만 있음).
다음은 컴퓨터 계정의 사용자별 권한 요약입니다.
사용자 유형 | 권한 |
---|---|
계정을 만드는 사람 | 유효성이 검사된 SPN 작성 |
계정 연산자 | SPN 쓰기 및 유효성 검사된 SPN 쓰기 |
인증된 사용자 | 없음 |
(자체) | 유효성이 검사된 SPN 작성 |
사용자 계정에는 "유효성 검사된 SPN" 속성 또는 "SPN 쓰기" 권한이 없습니다. 대신 "공용 정보 쓰기" 속성 집합은 임의의 SPN을 만들 수 있는 기능을 부여합니다.
메모
ntdsapi.h 헤더는 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 DsWriteAccountSpn을 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입대한
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows Vista |
지원되는 최소 서버 | Windows Server 2008 |
대상 플랫폼 | Windows |
헤더 | ntdsapi.h |
라이브러리 | Ntdsapi.lib |
DLL | Ntdsapi.dll |
참고 항목
DsGetSpn