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
[in] Operation
DsWriteAccountSpn が実行する操作
[in] pszAccount
Active Directory Domain Services のユーザーまたはコンピューター オブジェクトの識別名を指定する、null で終わる定数文字列へのポインター。 呼び出し元は、このオブジェクトの servicePrincipalName プロパティへの書き込みアクセス権を持っている必要があります。
[in] cSpn
rpszSpn内の SPN の数
[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 の書き込みを許可するように構成されている場合、上記の規則は適用されていません。 ただし、これによりセキュリティが低下するため、推奨されません。
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 |
関連項目
DsBindWithCred の
DsGetSpn の