共用方式為


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

包含從 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
帳戶操作員 寫入SPN和寫入已驗證的SPN
已驗證的使用者 沒有
(自我) 寫入已驗證的SPN
 

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

注意

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

要求

要求 價值
最低支援的用戶端 Windows Vista
支援的最低伺服器 Windows Server 2008
目標平臺 窗戶
標頭 ntdsapi.h
連結庫 Ntdsapi.lib
DLL Ntdsapi.dll

另請參閱

DS_SPN_WRITE_OP

域控制器和復寫管理功能

DsBind

DsBindWithCred

DsGetSpn