針對 AD 複寫錯誤 8589 進行疑難解答:DS 無法衍生服務主體名稱 (SPN)

本文說明 AD 作業失敗、Win32 錯誤 8589 的情況徵兆、原因和解決步驟。

注意

主使用者: 本文僅適用於技術支持專員和IT專業人員。 如果您要尋找問題的說明,請 詢問Microsoft社群

原始 KB 編號: 2703028

徵兆

錯誤 8589:「DS 無法衍生用來相互驗證目標伺服器的服務主體名稱 (SPN),因為本機 DS 資料庫中的對應伺服器對象沒有 serverReference 屬性。

符號錯誤:ERROR_DS_CANT_DERIVE_SPN_WITHOUT_SERVER_REF

針對 Active Directory 複寫進行疑難解答時,您會看到下列任何錯誤/警告。

  1. DCDIAG 報告 Active Directory 複寫測試失敗,錯誤狀態為 8589:DS 無法衍生服務主體名稱 (SPN) ith,因為本機 DS 資料庫中的對應伺服器對象沒有 serverReference 屬性。。

    來自 DCDIAG 的錯誤文字範例如下所示:

    測試伺服器: <月臺><DC 名稱>

    開始測試:複寫

    * 複寫檢查

    [複寫檢查,<DC 名稱>] 最近的複寫嘗試失敗:

    從 <來源 DC> 到 <目的地 DC>

    命名內容:DC=<DN 路徑>

    複寫產生錯誤 (8589):

    DS 無法衍生要相互驗證目標伺服器的服務主體名稱 (SPN),因為本機 DS 資料庫中的對應伺服器對象沒有 serverReference 屬性。

    失敗發生在 <日期><時間>。

    上次成功發生在 (永不)| <date>。

  2. DCDiag.exe顯示下列警告:

    發生警告事件。 EventID:0x80000785

    產生的時間: <DateTime>

    事件字串:嘗試建立下列可寫入目錄分割區的復寫連結失敗。
    目錄分割區:
    DC=ForestDnsZones,DC=contoso,DC=com
    來源域控制器:
    CN=NTDS 設定,CN=DCSRV01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=contosoDC=com
    來源網域控制器位址:

    <source DC NTDS Settings Obejct GUID>._msdcs.contoso.com
    現場間傳輸(如果有):
    在修正此問題之前,此域控制器將無法與來源域控制器複寫。

    使用者動作
    確認來源域控制器是否可供存取,或網路連線是否可用。

    其他資料
    錯誤值:
    8589

    DS 無法衍生要相互驗證目標伺服器的服務主體名稱 (SPN),因為本機 DS 資料庫中的對應伺服器對象沒有 serverReference 屬性。

  3. REPADMIN.EXE報告上次復寫嘗試失敗,狀態為8589

    REPADMIN 通常引用 8589 狀態的命令包括但不限於:

    • REPADMIN /SHOWREPL
    • REPADMIN /SHOWREPS
    • REPADMIN /REPLSUM
    • REPADMIN /SYNCALL

    Repadmin /showrepl 會傳回下列錯誤:

    來源: <月臺名稱>\<DC 名稱>

    <自>日期與時間以來<的連續失敗>

    上次錯誤:8589 (0x218d):

    DS 無法衍生要相互驗證目標伺服器的服務主體名稱 (SPN),因為本機 DS 資料庫中的對應伺服器對象沒有 serverReference 屬性。

  4. 在目錄服務事件記錄檔中引用錯誤狀態 8589 的事件

    通常引用 8589 狀態的事件包括,但不限於:

    事件來源和事件標識碼 訊息字串
    NTDS 複寫 / ActiveDirectory_DomainService 1411 Active Directory 無法為下列域控制器建構相互驗證服務主體名稱 (SPN)。
    NTDS 複寫 2023 本機域控制器無法將下列目錄分割區的變更複寫至下列遠端域控制器。
    NTDS KCC 1925 嘗試建立下列可寫入目錄磁碟分割的複寫連結失敗。

原因

復寫夥伴在允許端對端復寫完成之前強制降級並重新重繪之後,最常發生在DC上。 當您重新命名域控制器且 serverReference 屬性未更新時,也會發生這種情況。 此實例中的 serverReference 屬性是可在 Active Directory Sites and Services MMC 中檢視的伺服器物件(adsiedit.msc)。 伺服器對像是域控制器 NTDS Settings 物件的父物件。

解決方法

確認 serverReference 屬性未遺失或設定為不正確的值,並將它更新為正確的值。

  1. 尋找事件標識碼 1411 中所參考的域控制器。 我們有幾個選項可用來尋找此專案。 簡單是使用 ping (選項 A)。 如果 ping 失敗,請使用 PowerShell (選項 B)。 如果 PowerShell 不是選項,您可以使用 ldp.exe (選項 C)。 (注意:如果您的 DC 是 2003,而且您無法在上面安裝 PowerShell,您可以使用已加入 Windows 7 網域的用戶端或 Windows 2008 或 Windows 2008 R2 伺服器的 PowerShell)

    選項 A
    使用 NSLookup 或 ping 來尋找 <來源 DC NTDS 設定 Obejct GUID>._msdcs.contoso.com

    例如:

    Ping 3dab7f9b-92e7-4391-b8db-71df532c1493._msdcs.contoso.com

    Pinging DCSRV02.contoso.com [IP] with 32 bytes of data :
    
    Reply from [IP]: bytes=32 time<1ms TTL=128
    Reply from [IP]: bytes=32 time<1ms TTL=128
    Reply from [IP]: bytes=32 time<1ms TTL=128
    Reply from [IP]: bytes=32 time<1ms TTL=128
    

    選項 B
    使用 PowerShell 尋找參考的 DC。 您可以使用兩種 PowerShell 方法。 若要這樣做,請開啟「適用於 Windows PowerShell 的 Active Directory 模組」

    方法 1:執行下列兩個 PowerShell Cmdlet。 在第一個 Cmdlet 中,將分割區名稱 CN=Configuration,DC=contoso,DC=com 取代為組態分割區的 DN。 以域控制器的名稱取代伺服器名稱 DCSRV01.contoso.com 。 在第二個 Cmdlet 中,將 GUID 3dab7f9b-92e7-4391-b8db-71df532c1493 取代為事件標識符 1411 中的 GUID。

    $list = Get-ADObject -Filter 'ObjectClass -eq "ntdsdsa"' -SearchBase '*CN=Configuration,DC=contoso,Dc=com*' -Server *DCSRV01.contoso.com*  
    -includedeletedobjects -Properties *
    
    foreach ($dc in $list) {if ($dc.ObjectGUID -match "*3dab7f9b-92e7-4391-b8db-71df532c1493*") {Echo $dc.DistinguishedName }}  
    

    方法 2:另一個 PowerShell 選項是執行下列命令,然後搜尋輸出文本檔。 將 DCSRV01.contoso.com 取代為您環境中的DC。

    Get-ADObject -Filter 'ObjectClass -eq "ntdsdsa"' -SearchBase 'CN=Configuration,DC=contoso,Dc=com' -Server DCSRV01.contoso.com -includedeletedobjects > C:\NTDSDSA.txt
    

    然後搜尋事件標識碼 141 中所參考的 GUID NTDSA.txt

    選項 C

    使用Ldp.exe

    1. 按兩下 [開始],然後按兩下 [執行]
    2. 輸入 LDP.exe,然後按 ENTER 鍵。
    3. 在 [連線] 功能表上,按兩下 [系結],然後按下 [確定]。
    4. 在 [檢視] 功能表上,按兩下 [樹狀結構]。
    5. 在BaseDN中,按兩下拉式清單箭號,按兩下組態分割區的辨別名稱,然後按兩下 [確定]。
    6. 在 [選項] 功能表中,按兩下 [控制項]。
    7. 在 [控件] 對話框中,展開 [載入預先定義的] 功能表,按兩下 [傳回已刪除的物件],然後按兩下 [確定]。

      注意

      1.2.840.113556.1.4.417 控件會顯示在 [使用中控件] 清單中。

    8. 在 [瀏覽] 功能表上,單擊 [搜尋]
    9. 在 [基底 DN] 方塊中,輸入:CN=Sites, CN=Configuration,DC=contoso,DC=com (將 contoso 和 com 取代為適當的功能變數名稱。)
    10. 在 [篩選] 方塊中,輸入 (objectClass=ntdsdsa)
    11. 在 [範圍] 方塊中,選取 [子樹]
    12. 在 [屬性] 方塊中,輸入 * (星號)
    13. 按一下執行
    14. 在右側搜尋 objectGUID 屬性中的 GUID,以尋找所參考的伺服器。

    選項 D

    1. 從目的地DC取得 repadmin /showrepl 輸出,回報8589狀態。
    2. repadmin /showrepl使用從上一個步驟取得的輸出,識別輸出中的8589複寫狀態,並記錄上次嘗試訊息之後的日期和時間戳。
    3. 使用上一個步驟中的日期和時間,在目的地 DC 的 Directory Services 事件記錄檔中找出對應的事件識別碼 1411。 請注意,輸出中所列的 repadmin /showrepl DSA 物件 GUID 與事件識別碼 1411 中所報告的內容不同。請參閱下面的範例案例)
    4. 然後,藉由檢查 NTDS 設定屬性一般索引標籤或偵測事件標識碼中的 GUID,來尋找事件標識碼 1411 中列出的域控制器。
    5. 使用 ADSIEDIT 或 Active Directory 使用者和電腦 系結至來源 DC,然後開啟 [屬性編輯器],並在 serverReference 中複製值。 在物件的目的地 DC 複本上貼上此屬性的值。 (步驟 2)
  2. 使用上述其中一種方法找到所參考的伺服器之後,請執行下列動作:

    1. 按兩下 [開始],然後按兩下 [執行]
    2. 輸入 ADSIEDIT.msc,然後按 ENTER 鍵
    3. 以滑鼠右鍵按兩下 [ADSI 編輯],然後選取 [連線至..."
    4. 在 [連接點] 底下,選取已知的命名內容:“選取 [設定],然後按兩下 [確定]。
    5. 在左窗格上,展開 [設定]
    6. 接下來展開 “ CN=Configuration,DC=contoso,DC=com ”
    7. 接下來展開 “CN=Sites”
    8. 在 [CN=Sites] 下,展開 伺服器所在的月 臺。 範例:Default-First-Site-Name
    9. 在該網站底下,展開 CN=Servers。 範例:如果DCSRV02位於 Contoso.com 的 Default-First-Site-Name 網站中,您應該位於:CN=DCSRV02、CN=Servers、CN=Default-First-Site-Name、CN=Sites、CN=Configuration、DC=contoso、DC=com
    10. 以滑鼠右鍵按下域控制器(使用選項 A、B 或 C 找到),然後選取 [屬性]。
    11. 在 [屬性編輯器] 索引標籤中,向下捲動至 serverReference 屬性。
    12. serverReference 應該類似於 CN=DCSRV02,OU=域控制器,DC=Contoso,DC=com 如果遺失或不正確,請將它變更為正確的值。
    13. 關閉 ADSIEDIT.msc

其他相關資訊

範例案例

  1. 從目的地 DC 取得 repadmin /showrepl 輸出,並回報 8589 狀態。

  2. 使用從上一個步驟取得的 repadmin /showrepl 輸出,識別輸出中的 8589 複寫狀態,並在上次嘗試訊息之後記錄日期和時間戳。

    Repadmin /showrepl 輸出:

    利物浦\LIVCONTOSODCDSA 選項:IS_GC
    網站選項:(無)
    DSA 物件 GUID: <GUID>

    DSA 調用標識碼: <InvocationID>

    =≦ 輸入芳鄰======================================

    DC=Contoso,DC=com

    夏洛特\CONTOSOROOTDC1透過 RPC

    DSA 物件 GUID: <GUID>

    上次嘗試 @ <DateTime> 成功。

    CN=Configuration,DC=Contoso,DC=com

    休斯頓\5THWARDCORPDC 透過 RPC

    DSA 物件 GUID: <GUID>

    上次嘗試 @ <DateTime> 失敗,結果 8589 (0x218d):

    DS 無法衍生要相互驗證目標伺服器的服務主體名稱 (SPN),因為本機 DS 資料庫中的對應伺服器對象沒有 serverReference 屬性。

    1700 個連續失敗(秒)。

    上次成功 @ (永不)。

使用上一個步驟中的日期和時間,在目的地 DC 的 Directory Services 事件記錄檔中找出對應的事件識別碼 1411。 請注意,repadmin /showrepl 輸出中列出的 DSA 物件 GUID 與事件識別碼 1411 中所報告的內容不同。

目錄服務事件記錄檔:

記錄檔名稱:目錄服務
來源:Microsoft-Windows-ActiveDirectory_DomainService
日期: <DateTime>
事件標識碼:1411
工作類別:DS RPC 用戶端
層級:錯誤
關鍵字:傳統
使用者:匿名登入
計算機:LIVCONTOSODC.Contoso.com
描述:
Active Directory 網域服務 無法建構下列目錄服務的相互驗證服務主體名稱 (SPN)。

目錄服務: <GUID>._msdcs.Contoso.com

通話遭到拒絕。 此目錄服務的通訊可能會受到影響。

其他資料
錯誤值:
8589 DS 無法衍生要相互驗證目標伺服器的服務主體名稱 (SPN),因為本機 DS 資料庫中的對應伺服器對象沒有 serverReference 屬性。

[Active Directory 月臺和服務] 視窗的螢幕快照,其中已開啟 NTDS 設定 屬性視窗。

按兩下 [取消],然後檢視伺服器物件的屬性 (在此範例中為 5thWardCorpDC) 選取 [屬性編輯器] 索引卷標 (Server 2008 及更新版本),或使用 ADSIEDIT 在 Server 2003 上編輯物件

請注意,下圖中未設定 serverReference 屬性

已選取 serverReference 屬性的 5THWARDCORPDC 屬性視窗 螢幕快照。

使用 ADSIEDIT 或 Active Directory 使用者和電腦 系結至來源 DC,然後開啟屬性編輯器,並在 serverReference 中複製值。 在物件的目的地 DC 複本上貼上此屬性的值。

[Active Directory 月臺和服務] 視窗的螢幕快照,其中已開啟 5THWARDCORPDC 屬性視窗,並開啟 [字符串屬性編輯器] 視窗來編輯此值。

正確設定域控制器的 serverReference 屬性之後,如下所示:

[Active Directory 月臺和服務] 視窗的螢幕快照,其中已開啟 5THWARDCORPDC 屬性視窗,並已選取 serverReference 屬性。