Share via


DsWriteAccountSpnA 函式 (ntdsapi.h)

DsWriteAccountSpn 函式會將服務主體名稱陣列 (SPN) 寫入 Active Directory 網域服務 中指定使用者或電腦帳戶物件的 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

包含從 DSBindDSBindWithCred 函式取得的目錄服務句柄。

[in] Operation

包含其中一個 DS_SPN_WRITE_OP 值,指定 DsWriteAccountSpn 將執行的作業。

[in] pszAccount

常數 null 終止字串的指標,指定 Active Directory 網域服務 中使用者或計算機對象的辨別名稱。 呼叫端必須具有這個物件的 servicePrincipalName 屬性的寫入許可權。

[in] cSpn

指定 rpszSpn 中的 SPN 數目。 如果此值為零, 且 Operation 包含 DS_SPN_REPLACE_SPN_OP,則函式會從指定帳戶的 servicePrincipalName 屬性中移除所有值。

[in] rpszSpn

常數 Null 終止字串數組的指標,指定要加入或從 pszAccount 參數所識別的帳戶中移除 SPN。 DsGetSpn 函式可用來撰寫服務的SPN。

傳回值

如果成功或 Win32、RPC 或目錄服務錯誤失敗,則傳回 ERROR_SUCCESS

備註

DsWriteAccountSpn 函式會為服務的一或多個實例註冊 SPN。 用戶端會使用SPN搭配受信任的驗證服務來驗證服務。 為了防止應用程式或服務以詐騙方式註冊 SPN 來識別其他服務的安全性攻擊,使用者和計算機帳戶上的預設 DACL 只允許網域系統管理員在大部分情況下註冊 SPN。

此規則的其中一個例外狀況是,如果 SPN 中指定的主機是服務執行所在計算機的 DNS 或 NetBIOS 名稱,則可以呼叫 DsWriteAccountSpn 來註冊窗體 “ServiceClass/Host:Port” 的簡單 SPN。

另一個例外狀況是計算機帳戶上的預設 DACL 可讓呼叫端自行註冊 SPN,受限於特定條件約束。 例如,計算機帳戶可以有與其計算機名稱相對的SPN,格式為 「host/<computername>」。。 因為 computername 包含在 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
驗證的使用者
(自我) 寫入驗證的SPN
 

在用戶帳戶上,沒有「已驗證的SPN」屬性或「寫入SPN」許可權。 相反地,「寫入公用資訊」屬性集會授與建立任意SPN的能力。

注意

ntdsapi.h 標頭會將 DsWriteAccountSpn 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例

規格需求

需求
最低支援的用戶端 Windows Vista
最低支援的伺服器 Windows Server 2008
目標平台 Windows
標頭 ntdsapi.h
程式庫 Ntdsapi.lib
Dll Ntdsapi.dll

另請參閱

DS_SPN_WRITE_OP

域控制器和復寫管理功能

DsBind

DsBindWithCred

DsGetSpn