次の方法で共有


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 値の 1 つを格納します。

[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 アカウントで実行されているサービスが、サービス 実行されているコンピューターの DNS または NetBIOS 名である場合、DsWriteAccountSpn を呼び出して、"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 を書き込むには、ライターに "ServicePrincipalName の書き込み" 権限が必要です。この権限は、アカウントを作成したユーザーに既定では付与されません。 そのユーザーには、"検証済み SPN の書き込み" 権限があります (マシン アカウントにのみ存在します)。

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

ユーザーの種類 権利
アカウントを作成するユーザー 検証済み SPN を書き込む
アカウントオペレーター SPN の書き込みと検証済み SPN の書き込み
認証済みユーザー 何一つ
(自己) 検証済み SPN の書き込み
 

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

手記

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

必要条件

要件 価値
サポートされる最小クライアント Windows Vista
サポートされる最小サーバー Windows Server 2008
ターゲット プラットフォーム の ウィンドウズ
ヘッダー ntdsapi.h
ライブラリ Ntdsapi.lib
DLL Ntdsapi.dll

関連項目

DS_SPN_WRITE_OP

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

DsBind

DsBindWithCred の

DsGetSpn の