文章編號: 319723 - 上次校閱: 2009年8月11日 - 版次: 22.0

如何使用 SQL Server 中的 Kerberos 驗證

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。

在此頁中

全部展開 | 全部摺疊

結論

您可以與 Microsoft SQL Server 2000 使用 Kerberos 驗證。SQL Server 2000 支援這項功能為典型的 Microsoft Windows 2000 或 Microsoft Windows Server 2003 Active Directory 網域安裝的一部份。Microsoft Windows 2000 Service Pack 3 (SP3) 和 Windows Server 2003,您就可以啟用 Kerberos 驗證伺服器叢集上。

如這個新增功能的更多有關,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
235529? (http://support.microsoft.com/kb/235529/ ) Kerberos 支援 Windows 2000 為基礎的伺服器叢集上

附註如果您執行 Windows 2000 SP3 或 Windows Server 2003,您只可以使用這項功能。

SQL Server 2000 容錯移轉叢集也會使用這項功能。當 SQL Server 是依賴的資源是在 Windows 2000 為基礎的叢集中的 [網路名稱後,您可以使用 Kerberos 驗證資源上您升級到 Windows 2000 SP3 或 Windows Server 2003 的電腦。若要安裝 SQL Server 容錯移轉叢集,您必須有 Microsoft SQL Server 2000 企業版或開發 o 人 h 員 ? 工 u 具 ? 版安裝。

附註概念與本文中套用至 SQL Server 2000 的討論區也適用於 SQL Server 2005。如需有關此主題在 SQL Server 2005 中的詳細資訊,請參閱 SQL Server 2005 線上叢書 》 中的下列主題]:
  • 如何: 啟用 Kerberos 驗證,包括伺服器叢集上的 SQL Server 虛擬伺服器
  • 登錄的服務主要名稱
如更多有關如何確定您使用 Kerberos 驗證在 SQL Server 2005 中,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
909801? (http://support.microsoft.com/kb/909801/ ) 如何確定當您建立遠端連線至 SQL Server 2005 的執行個體是否使用 Kerberos 驗證

其他相關資訊

SQL Server 可以使用 Kerberos 驗證為伺服器叢集。與執行 SQL Server 的獨立電腦或虛擬伺服器上執行的 SQL Server 執行個體,您可以使用 Kerberos 驗證。

連線到正在執行 Microsoft 網際網路資訊服務的伺服器,然後對 SQL Server 2000 中的 Kerberos 連線

本章節說明如何連接到執行 Microsoft [網際網路資訊服務 (IIS)] 進行 Kerberos 連線到執行 SQL Server 的伺服器的伺服器

附註
執行安裝程式的程序之前下載 [Kerbtray 和 SetSPN 公用程式。

如果要下載 Kerbtray 公用程式,請造訪下列 Microsoft 網站:
http://www.microsoft.com/downloads/details.aspx?FamilyID=4e3a58be-29f6-49f6-85be-e866af8e7a88&displaylang=en (http://www.microsoft.com/downloads/details.aspx?FamilyID=4e3a58be-29f6-49f6-85be-e866af8e7a88&displaylang=en)
與 Kerbtray.exe,可以輕易地確認或移除 (或兩者) 從任何關聯正在使用的電腦的 Kerbero 票證。

如果要下載 SetSPN 公用程式,請造訪下列 Microsoft 網站:
http://www.microsoft.com/downloads/details.aspx?FamilyID=5fd831fd-ab77-46a3-9cfe-ff01d29e5c46&displaylang=en (http://www.microsoft.com/downloads/details.aspx?FamilyID=5fd831fd-ab77-46a3-9cfe-ff01d29e5c46&displaylang=en)


下列程序提供您使用 Kerberos 驗證透過 IIS 頁面來存取正在執行 SQL Server 的伺服器的安裝程序的範例。

步驟 1: 設定網域控制站

在網域控制站,Active Directory 使用者和電腦] 中:
  1. 以滑鼠右鍵按一下您想要設定委派 (IIS 服務伺服器),然後按一下以選取 [信任這台電腦所委派的 電腦。執行 SQL Server 的電腦是否有什麼似乎是最後一個連絡的電腦,但電腦有連結的伺服器,它必須也授與委派權限。如果它不是鏈結中的最後一個電腦,是媒介的所有電腦必須都是受信任可以委派。
  2. SQL Server 服務帳戶的網域使用者帳戶的委派權限授與。您必須有網域使用者帳戶的叢集 SQL Server 安裝 (這個步驟並非必要的電腦執行 SQL Server 正在使用本機系統帳戶):
    1. 在 [使用者] 資料夾用滑鼠右鍵按一下使用者] 帳戶,然後按一下 [內容]。
    2. 在 [使用者帳戶內容] 對話方塊中,按一下 [帳戶] 索引標籤。
    3. 在 [帳戶選項,] 底下按一下以選取 帳戶受信任的委派] 核取方塊。請確定 [帳戶是敏感和無法委派] 核取方塊已清除這個帳戶。

      附註'帳戶受信任可以委派' 右邊時,需要 SQL Server 服務帳號只有您所從目標 SQL 伺服器委派認證到遠端 SQL 伺服器如在雙躍點的案例中像使用 Windows 驗證的分散式查詢 (連結的伺服器查詢)。
    附註這些步驟僅適用於 Windows 2000 伺服器。如果您使用的 Windows Server 2003,請造訪下列 Microsoft 開發 o 人 h 員 ? 工 u 具 ? 網路 (MSDN) 網站]:
    http://technet2.microsoft.com/windowsserver/en/library/bef202b0-c8e9-4999-9af7-f56b991a4fd41033.mspx (http://technet2.microsoft.com/windowsserver/en/library/bef202b0-c8e9-4999-9af7-f56b991a4fd41033.mspx)
  3. 使用 Kerbtray.exe 公用程式來確認該 Kerberos 票證已經從網域控制站與主機接收:
    1. 在 [通知] 區域中的 [Kerbtray] 圖示上按一下滑鼠右鍵,然後按一下 [清除票證
    2. 等候綠色 Kerbtray 圖示從 [綠] 變更為黃色。一旦發生這種情況開啟命令提示字元] 視窗,並執行這個命令:
      網路工作階段 * / d
      這將卸除現有的工作階段,並強制才能建立新的工作階段及收到的 Kerberos 票證。

步驟 2: 設定 IIS 服務伺服器

  1. 範例.asp 檔案取代預設 Web 站台 Wwwroot 檔案。若要建立範例.asp 檔案,使用 「 ASP 測試 SQL Server 資料擷取的指令碼 」 一節中的 [所提供的程式碼]。
  2. 將檔案加入至 [Wwwroot 資料夾。如果要執行這項操作,使用 ["ASP 測試指令碼的 SQL Server 資料擷取 」 一節中的 [範例程式碼]。 將檔案儲存為 Default.asp。
  3. 重新設定 Web 伺服器使用整合式 Windows 驗證只:
    1. 預設 Web 伺服器上按一下滑鼠右鍵,然後按一下 [安全性] 資料夾。
    2. 在 [安全性] 資料夾中進行正確的變更],然後按一下以清除 [匿名存取]。
    3. 從命令提示字元執行這個命令:
      cscript C:\Inetpub\Adminscripts\adsutil.vbs 取得 w3svc/NTAuthenticationProviders
      如果啟用 交涉,則會傳回下列:
       NTAuthenticationProviders : (STRING) Negotiate,NTLM
      如需詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
      215383? (http://support.microsoft.com/kb/215383/ ) 如何將 IIS 設定為支援網路驗證 Kerberos 通訊協定和 NTLM 通訊協定
    備忘稿
    • 您必須安裝 Microsoft 資料存取 (MDAC) 2.6,或更新的版本,IIS 服務伺服器上。若要這麼做 (並讓工具可供測試),安裝到 Web 伺服器的 SQL Server 2000 用戶端工具。安裝只有 MDAC 2.6 或更新版本 (沒有安裝用戶端工具),請造訪下列 Microsoft 網站:
      http://msdn2.microsoft.com/en-us/data/aa937730.aspx (http://msdn2.microsoft.com/en-us/data/aa937730.aspx)
    • IIS 是常見的中介層系統。然而,IIS 並不是只中介層系統。如果 IIS 不是您環境中的介層系統,依照適當的中介層系統。
  4. 確認
    HKLM\SW\MS\MSSQLSERVER\Client\DSQUERY
    值是出現在登錄中。如果沒有顯示值就將它加入為
    DSQUERY:Reg_SZ:DBNETLIB
  5. 使用 Kerbtray.exe 公用程式來確認該 Kerberos 票證已經從網域控制站與主機接收:
    1. 在 [通知] 區域中的 [Kerbtray] 圖示上按一下滑鼠右鍵,然後按一下 [清除票證
    2. 等候綠色 Kerbtray 圖示從 [綠] 變更為黃色。一旦發生這種情況開啟命令提示字元] 視窗,並執行這個命令:
      網路工作階段 * / d
      這將卸除現有的工作階段,並強制才能建立新的工作階段及收到的 Kerberos 票證。

步驟 3: 設定 SQL 伺服器服務來動態建立的 SPN

若要執行此動作必須授與下列存取控制設定,Active Directory 目錄服務中的 [SQL Server] 服務帳戶:
  • 讀取 servicePrincipalName
  • 撰寫 servicePrincipalName
警告
  • 如果您使用 [Active Directory 服務介面 (ADSI) 編輯 」 嵌入式管理單元、 LDP] 公用程式或 LDAP 3 用戶端並不正確地修改 Active Directory 物件的屬性,會發生嚴重的問題。如果要解決這些問題,您可能必須重新安裝 Microsoft Exchange 2000 伺服器或 Microsoft Exchange Server 2003。在某些情況下您可能必須重新安裝 Microsoft Windows 2000 伺服器或 Microsoft Windows Server 2003,然後再重新安裝 Exchange 2000 伺服器或 Exchange Server 2003。我們無法保證可以解析這些問題。修改這些屬性,請自行負擔相關的風險。
  • 您必須以網域系統管理員身分登。或者,您必須要求您的網域系統管理員授與適當的權限和 SQL Server 啟動帳戶適當使用者的權限。
若要進行 SQL 伺服器服務來動態建立的 SPN,SQL Server 服務啟動時請依照下列步驟執行:
  1. 按一下 [開始]、 按一下 [執行]、 輸入 Adsiedit.msc,然後按一下 [確定]]。

    附註[ADSIEdit 工具會包含在 Windows 支援工具。若要取得 Windows 支援工具,請造訪下列 Microsoft 網站]:
    http://www.microsoft.com/downloads/details.aspx?familyid=6EC50B78-8BE1-4E81-B3BE-4E7AC4F0912D&displaylang=en (http://www.microsoft.com/downloads/details.aspx?familyid=6EC50B78-8BE1-4E81-B3BE-4E7AC4F0912D&displaylang=en)
  2. 在 [ADSI 編輯器] 嵌入式管理單元,展開 網域 [DomainName]、 展開 DC = RootDomainName,展開 CN = 使用者 上, 按一下滑鼠右鍵 CN = AccountName,然後按一下 [內容

    備忘稿
    • DomainName為網域名稱的預留位置。
    • RootDomainName為根網域名稱的預留位置。
    • AccountName是您指定啟動 SQL Server 服務帳戶的預留位置。
    • 如果您指定本機系統帳戶來啟動 SQL Server 服務,AccountName 是您用來登入 Microsoft Windows 帳戶的預留位置。
    • 如果您指定網域使用者帳戶,以啟動 SQL Server 服務,AccountName 會是網域使用者帳戶的預留位置。
  3. CN = AccountName 內容 對話方塊方塊中,按一下 [安全性] 索引標籤。
  4. 在 [安全性] 索引標籤上按一下 [進階]。
  5. 在 [進階安全性設定] 對話方塊確定 SELF 列出在 [權限項目]。

    如果沒有列出 SELF 就按一下 [新增],然後再新增 [SELF
  6. 在 [權限項目,按一下 [SELF,然後按一下 [編輯]。
  7. 在 [權限項目] 對話方塊按一下 [內容] 索引標籤。
  8. 在 [屬性] 索引標籤上按一下 [套用在] 清單中的 [只有這個物件,並按一下以選取下列權限在 [權限] 核取方塊:
    • 讀取 servicePrincipalName
    • 撰寫 servicePrincipalName
  9. 按兩次 [確定]

    附註有關與此處理程序請連絡 Active Directory 產品支援,並提到這個 「 Microsoft 知識庫 」 文件。

    附註若要使用 [dsacls] 工具來判斷自我帳戶是否具有寫入 ServicePrincipalName 權限,使用 dsacls 命令。 下列是語法:
    dsacls <distinguished_Name_of_service_account>
    如果自我帳戶寫入 ServicePrincipalName 使用權限您會看到下列輸出:
    Allow NT Authority\SELF SPECIAL ACCESS for Validated Write to Service principal name
    WRITE PROPERTY
    dsacls 工具是 「 支援工具的一部份。
  10. CN = AccountName 內容 對話方塊方塊中,按一下 [屬性編輯器
  11. 屬性,] 下按一下 servicePrincipalName 在 [屬性] 欄,然後按一下 [編輯]。
  12. 在 [Multi-valued 字串編輯器] 對話方塊移除服務原則名稱 (SPN) 的 SQL Server 執行個體,請使用此 SQL Server 服務帳戶。

    警告 您只能刪除 [SPN 的 SQL Server 您目前正在使用該執行個體。其他 SQL Server 的執行個體,請使用此服務帳戶,將能夠移除與相關這些執行個體下次啟動這些執行個體的 SPN。
  13. 結束 [ADSI 編輯器] 嵌入式管理單元。
依照這些步驟執行之後,SPN 問題也會消除如果您變更 TCP/IP 連接埠或網域名稱為新安裝的 SQL Server 2005 或 SQL Server 2005 的現有例項。

步驟 4: 設定用戶端電腦

  1. 將連線,請確認每個用戶端基於該 Microsoft Internet Explorer 設定為使用 Windows 驗證:
    1. 在網際網路總管] 在 [工具] 功能表,按一下 [網際網路選項]。
    2. 按一下 [進階] 索引標籤。
    3. 安全性,] 之下按一下以選取 [啟用整合的 Windows 驗證 (需要重新啟動),然後再按一下 [確定]

步驟 5: 測試組態

每一部電腦的相關:
  1. 登入該電腦,並依照 Kerbtray.exe 確認電腦可以取得有效的 Kerberos 票證,從網域控制站。
  2. 使用 Kerbtray.exe 移除電腦上的所有票證。
  3. 建立並連接至傳回 SQL 的網頁伺服器的資料。

    附註執行 SQL Server 的電腦的名稱取代 SQLSERVERNAME
    • 如果傳回資料,此頁面會顯示驗證類型 交涉sp_helpdb 結果 SQL Server 資料儲存應該傳回的資料庫清單正在伺服器的程序透過.ASP 頁面連線至。
    • 如果您稽核在 SQL Server 中開啟,應用程式記錄檔中您會看到連線是 「 受信任 」。

SQL Server 資料擷取的 ASP 測試指令碼

以下是 SQL Server 資料的 ASP 測試指令。如果您使用 [這個程式碼範例,請確定您取代執行 SQL Server 的電腦名稱 SQLSERVERNAME
<%@ Language=VBScript %>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
</HEAD>
<BODY>
<%="'auth_user' is" & request.servervariables("auth_user")%>
<P>
<%="'auth_type' is" & request.servervariables("auth_type")%>
<P>
Connections string is <B>" Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=pubs;Data Source=SQLSERVERNAME </B>
<P>
<%
	set rs = Server.CreateObject("ADODB.Recordset")
	set cn = Server.CreateObject("ADODB.Connection")
	cn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=pubs;Data Source=SQLSERVERNAME"
	rs.open "MASTER..sp_helpdb",cn
	Response.Write cstr(rs.Fields.Count) +"<BR>"
	while not rs.EOF
		Response.Write cstr(rs(0))+"<BR>"
		rs.MoveNext
	wend
	rs.Close
	cn.Close
	set rs = nothing ' Frees memory reserved by the recordset.
	set cn = nothing ' Frees memory reserved by the connection.
%>
</BODY>
</HTML>
					

如何收集 Active Directory 伺服器原則名稱資訊的清單

蒐集 Active Directory 伺服器原則名稱 (SPN) 資訊的清單,類型下列命令其中一個 betaland 其中是 NetBIOS 網域名稱,而 NewoutputUsers.txt 您網域控制站上會是您要用來連接埠結果輸出檔的名稱。如果不使用完整的路徑則會將檔案放置在目前的資料夾,您可在此執行命令列中。這個範例命令會查詢整個網域:
ldifde-d"CN = Users DC = betaland"-l servicePrincipalName-F NewoutputUsers.txt
這個語法會建立一個名為 NewoutputUsers.txt 包含類似於本文中的 「 網域層級的輸出 NewouputUsers.txt 」 一節中輸出的資訊的檔案。

收集整個網域時,可能危及這個輸出。因此,若要限制到特定的使用者名稱蒐集之的資訊,請使用下列語法其中 User Name 是使用者名稱,而 betaland 是您正在查詢的網域:
ldifde-d"CN = User Name,DC = betaland"-l servicePrincipalName-F NewoutputUsers.txt
大幅收集特定使用者的資訊可以減少您必須透過搜尋的資料。如果您收集的整個網域資訊,搜尋伺服器有問題的特定使用者名稱。輸出] 範例中您會看到:
  • 伺服器,不再存在,但所未完全移除從 Active Directory 的項目。
  • 使用者 User Name 」 有十個不同的伺服器的有效 SPN 資訊。
此外,您可以使用 Active Directory 服務介面 (ADSI) 工具,以修正不是有效的 Active Directory 項目。

警告如果您使用 [ADSI 編輯器] 嵌入式管理單元,[LDP 公用程式或任何其他 LDAP 版本 3 用戶端,及您不正確地修改 Active Directory 物件的屬性,您可能會導致嚴重的問題。這些問題可能需要重新安裝 Microsoft Windows 2000 Server、 Microsoft Windows Server 2003、 Microsoft Exchange 2000 Server、 Microsoft Exchange Server 2003 或同時 Windows 及 Exchange。Microsoft 無法保證可以獲得解決,如果您不當修改 Active Directory 物件屬性發生的問題。修改這些屬性,請自行負擔相關的風險。

網域層級的 NewouputUsers.txt 的輸出

	dn: CN=User Name,CN=Users,DC=betaland
	changetype: add
	servicePrincipalName: MSSQLSvc/CLUSTERDEFAULT.betaland:1257
	servicePrincipalName: MSSQLSvc/INST3.betaland:3616
	servicePrincipalName: MSSQLSvc/INST2.betaland:3490
	servicePrincipalName: MSSQLSvc/SQLMAN.betaland:1433
	servicePrincipalName: MSSQLSvc/VSS1.betaland:1433
	servicePrincipalName: MSSQLSvc/INST1.betaland:2536
	servicePrincipalName: MSSQLSvc/INST4.betaland:3967
	servicePrincipalName: MSSQLSvc/SQLVIRTUAL1.betaland:1434
	servicePrincipalName: MSSQLSvc/SQLVIRTUAL.betaland:1433
	servicePrincipalName: MSSQLSvc/SQLBUSTER.betaland:1315

?考

如需有關安全性帳戶委派的詳細資訊,請參閱 SQL Server 線上叢書 》 中的安全性帳戶委派主題]。

如需詳細資訊按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中 「 文件]:
262177? (http://support.microsoft.com/kb/262177/ ) 如何啟用 Kerberos 事件記錄
321708? (http://support.microsoft.com/kb/321708/ ) 如何在 Windows 2000 中使用 「 網路診斷 」 工具 (Netdiag.exe)
326985? (http://support.microsoft.com/kb/326985/ ) 如何疑難排解與 Kerberos 相關的問題,在 IIS 中
244474? (http://support.microsoft.com/kb/244474/ ) 如何強制使用 TCP,而不是 Windows Server 2003 中、 Windows XP 以及 Windows 2000 的 UDP Kerberos

這篇文章中的資訊適用於:
  • Microsoft SQL Server 2000 Standard Edition?應用於:
    • Microsoft Windows 2000 Advanced Server SP3
    • Microsoft Windows 2000 Service Pack 3
    • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
    • Microsoft Windows Server 2003, Datacenter Edition (32-bit x86)
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Workgroup Edition
關鍵字:?
kbmt kbinfo KB319723 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:319723? (http://support.microsoft.com/kb/319723/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。