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

rpszSpn의 SPN 수를 지정합니다. 이 값이 0이고 OperationDS_SPN_REPLACE_SPN_OP 포함된 경우 함수는 지정된 계정의 servicePrincipalName 특성에서 모든 값을 제거합니다.

[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 작성
Account Operators SPN 쓰기 및 유효성이 검사된 SPN 쓰기
인증된 사용자 없음
(self) 유효성이 검사된 SPN 쓰기
 

사용자 계정에는 "유효성이 검사된 SPN" 속성 또는 "쓰기 SPN" 권한이 없습니다. 대신 "공용 정보 쓰기" 속성 집합은 임의의 SPN을 만들 수 있는 기능을 부여합니다.

참고

ntdsapi.h 헤더는 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 DsWriteAccountSpn을 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입에 대한 규칙을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista
지원되는 최소 서버 Windows Server 2008
대상 플랫폼 Windows
헤더 ntdsapi.h
라이브러리 Ntdsapi.lib
DLL Ntdsapi.dll

추가 정보

DS_SPN_WRITE_OP

도메인 컨트롤러 및 복제 관리 함수

DsBind

DsBindWithCred

DsGetSpn