DsWriteAccountSpnA 関数 (ntdsapi.h)

DsWriteAccountSpn 関数は、サービス プリンシパル名 (SPN) の配列を、Active Directory Domain Servicesの指定したユーザーまたはコンピューター アカウント オブジェクトの servicePrincipalName 属性に書き込みます。 関数は、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 関数は、サービスの 1 つ以上のインスタンスの SPN を登録します。 SPN は、信頼された認証サービスと共にクライアントによって使用され、サービスを認証します。 アプリケーションまたはサービスが他のサービスを識別する SPN を不正に登録するセキュリティ攻撃から保護するために、ユーザー アカウントとコンピューター アカウントの既定の DACL では、ほとんどの場合、ドメイン管理者のみが SPN を登録できます。

この規則の 1 つの例外は、LocalSystem アカウントで実行されているサービスが DsWriteAccountSpn を呼び出して、SPN で指定されたホストがサービスが実行されているコンピューターの DNS または NetBIOS 名である場合に、"ServiceClass/Host:Port" という形式の単純な SPN を登録できることです。

もう 1 つの例外は、コンピューター アカウントの既定の DACL では、特定の制約に従って、呼び出し元が自分で SPN を登録できる点です。 たとえば、コンピューター アカウントは、"host/<computername>" という形式のコンピューター名に対する相対 SPN を持つことができます。 コンピューター名は SPN に含まれているため、SPN は許可されます。

DSA が SPN の書き込みが許可されるように構成されている場合、上記のどの規則も適用されません。 これによりセキュリティが低下するため、推奨されません。

DsWriteAccountSpn に渡される SPN は、pszAccount 内のコンピューター オブジェクトの Service-Principal-Name 属性に実際に追加されます。 この呼び出しは、アカウント オブジェクトが格納されているドメイン コントローラーに対して RPC を使用して行われるので、アカウントで許可されている SPN に対してポリシーを安全に適用できます。 LDAP を使用して SPN プロパティに直接書き込むことはできません。すべての書き込みは、この RPC 呼び出しを介して行う必要があります。 LDAP を使用した読み取りは許可されます。

SPN の設定に必要なアクセス許可

アカウントに任意の SPN を書き込むには、ライターに "Write ServicePrincipalName" 権限が必要です。この権限は、既定ではアカウントを作成したユーザーには付与されません。 そのユーザーには、"検証済み SPN の書き込み" 権限があります (マシン アカウントにのみ存在します)。

マシン アカウントのユーザーごとの権限の概要を次に示します。

ユーザーの種類 権限
アカウントを作成しているユーザー 検証済み SPN の書き込み
Account Operators SPN の書き込みと検証済み SPN の書き込み
Authenticated Users なし
(self) 検証済み SPN の書き込み
 

ユーザー アカウントでは、"Validated SPN" プロパティまたは "Write SPN" 権限はありません。 代わりに、"パブリック情報の書き込み" プロパティ セットは、任意の SPN を作成する機能を付与します。

注意

ntdsapi.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして DsWriteAccountSpn を定義します。 encoding-neutral エイリアスの使用を encoding-neutral ではないコードと混在すると、コンパイル エラーまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

要件
サポートされている最小のクライアント Windows Vista
サポートされている最小のサーバー Windows Server 2008
対象プラットフォーム Windows
ヘッダー ntdsapi.h
Library Ntdsapi.lib
[DLL] Ntdsapi.dll

こちらもご覧ください

DS_SPN_WRITE_OP

ドメイン コントローラーとレプリケーション管理機能

DsBind

DsBindWithCred

DsGetSpn