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
包含其中一個 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 |