如何使用 SQL Server 中的 Kerberos 驗證

文章翻譯 文章翻譯
文章編號: 319723 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

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

如需有關這種額外功能,請按一下下面的文章編號,檢視中的文件Microsoft 知識庫 」:
235529Kerberos 支援到 Windows 2000 為基礎的伺服器叢集

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

SQL Server 2000容錯移轉叢集時,也會使用這項功能。當網路命名SQL Server 所相依的資源是在 Windows 2000 為基礎的叢集中,升級之後,您可以在資源上使用 Kerberos 驗證若要在 Windows 2000 SP3 的電腦或 Windows Server 2003。若要安裝 SQL Server容錯移轉叢集,您必須要有 Microsoft SQL Server 2000年企業版或安裝的開發者版本。

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

其他相關資訊

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

連線到伺服器正在執行 Microsoft網際網路資訊服務和製造 Kerberos SQL 的連線Server 2000

本節將說明如何連接到正在執行的伺服器Microsoft Internet Information Services (IIS) 設定為 Kerberos 連線到一種執行 SQL Server 的伺服器。

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

如果要下載 「 Kerbtray 」 公用程式,請造訪下列 Microsoft 網站: 使用 Kerbtray.exe,您可以輕鬆地確認或移除 (或兩者)從任何相關聯的電腦所使用的 Kerbero 票證。

如果要下載 「 SetSPN 」 公用程式,請造訪下列 Microsoft 網站站台:
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 伺服器委派認證到遠端 SQL 伺服器,例如,在雙躍點的情況下就像使用 Windows 驗證的分散式查詢 (連結的伺服器查詢) 時,才需要 SQL Server 服務帳戶的 「 帳戶是受信任可以委派 」 權限。
    附註這些步驟僅適用於 Windows 2000 Server。如果您使用 Windows Server 2003,請造訪下列 Microsoft 開發人員網路 (MSDN) 網站:
    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. 取代範例中的預設 Web 站台 Wwwroot 檔案.asp 檔。若要建立範例.asp 檔案,請使用程式碼中所提供「 ASP 測試 SQL Server 擷取資料的指令碼 」 一節。
  2. 將檔案加入至 [Wwwroot] 資料夾中。若要執行這項操作,請使用"ASP 測試指令碼的 SQL Server 擷取資料 」 一節中的範例程式碼。將檔案儲存為 Default.asp 中。
  3. 重新設定為使用 Windows 整合式 Web 伺服器僅驗證方式:
    1. 預設的 Web 伺服器上按一下滑鼠右鍵,然後按一下安全性] 資料夾中。
    2. 在 [安全性] 資料夾中,進行正確的變更,並然後按一下以清除 匿名存取.
    3. 從命令提示字元中執行這項指令:
      取得 cscript C:\Inetpub\Adminscripts\adsutil.vbsw3svc/NTAuthenticationProviders
      如果啟用交涉時,會傳回下列:
       NTAuthenticationProviders : (STRING) Negotiate,NTLM
      如需詳細資訊,按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
      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
    • 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 Server 服務,以動態方式建立的 Spn

若要這樣做,您必須授與 SQL Server 服務帳戶 Active Directory 目錄服務中的下列的存取控制設定:
  • 讀取 servicePrincipalName
  • 撰寫 servicePrincipalName
警告
  • 如果您使用 [編輯使用中目錄服務介面 (ADSI) 嵌入式管理單元、 LDP 公用程式或 LDAP 3 用戶端,並不正確地修改 Active Directory 物件的屬性,就會發生嚴重的問題。如果要解決這些問題,您可能必須重新安裝 Microsoft Exchange 2000 伺服器或 Microsoft Exchange Server 2003年。在某些情況下,您可能必須重新安裝 Microsoft Windows 2000 Server 或 Microsoft Windows Server 2003 後再重新安裝 Exchange 2000 伺服器或 Exchange Server 2003年。我們無法保證可以解決這些問題。修改這些屬性,請自行承擔風險。
  • 您必須以網域系統管理員身分登入。或者,您必須要求網域系統管理員授與適當的權限和適當的使用者的 SQL Server 啟動帳戶的權限。
要設定 SQL Server 服務,以動態方式建立的 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
  2. 在 [Adsi 編輯器] 嵌入式管理單元,展開 網域 [網域名稱]展開 DC = RootDomainName展開 CN = Users以滑鼠右鍵按一下 CN = AccountName 然後按一下 屬性.

    注意
    • 網域名稱 為網域名稱的預留位置。
    • RootDomainName 為根網域名稱的預留位置。
    • AccountName 為您指定要啟動 SQL Server 服務帳號的預留位置。
    • 如果您指定要啟動 SQL Server 服務,本機系統帳戶 AccountName 為您用來登入 Microsoft Windows 帳戶的預留位置。
    • 如果您指定網域使用者帳戶來啟動 SQL Server 服務, AccountName 為網域使用者帳戶的預留位置。
  3. CN = AccountName 屬性 對話方塊中,按一下 安全性 索引標籤。
  4. 在上 安全性 索引標籤上按一下 進階.
  5. 進階的安全性設定 對話方塊,請確定 自我 列於 使用權限項目.

    If 自我 是未列出,請按一下 新增然後再新增 自我.
  6. 在下 使用權限項目按一下 自我然後按一下 編輯.
  7. 使用權限項目 對話方塊中,按一下 屬性 索引標籤。
  8. 在上 屬性 索引標籤上按一下 只有這個物件套用在 ],然後按一下滑鼠以選取下列權限] 之下的核取方塊 權限:
    • 讀取 servicePrincipalName
    • 撰寫 servicePrincipalName
  9. 按一下 [確定] 兩次。

    附註有關這項程序,請連絡 Active Directory 產品支援服務,並提出這個微軟知識庫文件。

    附註若要使用 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. 多重值字串編輯器 對話方塊中移除的 SQL Server 的執行個體可以使用這個 SQL Server 服務帳戶的服務主要名稱 (Spn)。

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

重要我們建議您不要授予 WriteServicePrincipalName 加 「 SQL 服務 」 帳戶的從右至中,當下列情況皆成立時:
  • 有多個網域控制站。
  • SQL Server 已叢集化。
在這個案例中,因為在 Active Directory 複寫延遲可能會被刪除的 SPN,SQL Server。這可能會造成 SQL Server 執行個體的連線問題。

假設您具有下列:
  • SQL 的虛擬執行個體,名為 Sqlcluster,兩個節點: 節點 A 和節點 b。
  • 節點 A 經過網域控制站 A 和節點 B 經過網域控制站 b。


下列可能會發生:
  1. Sqlcluster 執行個體正執行於節點 A,並在啟動時登錄在網域控制站 A SQL SPN,往上...
  2. Sqlcluster 執行個體容錯移轉至節點 B 當節點 A 是正常關機。
  3. Sqlcluster 執行個體取消註冊的 SPN,從網域控制站 A,節點 a 上的關閉程序
  4. SPN 從網域控制站 A 中移除,但變更尚未抄寫至網域控制站 b。
  5. 當啟動節點 B,Sqlcluster 執行個體會嘗試向 SQL SPN 註冊網域控制站 b。後來,SPN 是否仍然存在節點 B 不會註冊 SPN。
  6. 請稍候,網域控制站 A 會複寫到網域控制站 B (從步驟 3) SPN 刪除 Active Directory 複寫的一部份。最終結果是任何有效的 SPN 存在的網域中的 SQL 執行個體,並因此片 Sqlcluster 執行個體的連線問題。

附註在 SQL Server 2012年修正這個問題。


步驟 4: 設定用戶端電腦

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

步驟 5: 測試設定

每一部電腦的相關資訊:
  1. 登入的電腦],然後使用 Kerbtray.exe 來驗證確定電腦可以從網域取得有效的 Kerberos 票證控制站。
  2. 用於 Kerbtray.exe 上的 [移除所有的票證電腦。
  3. 建立並連接至 Web 網頁,會傳回 SQL伺服器資料。

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

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

以下是 SQL Server 資料 ASP 測試指令碼。如果您使用這個對話方塊[程式碼範例,請確定您取代 SQLSERVERNAME 這是與電腦的名稱在執行 SQL Server 中。
<%@ 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 " Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=pubs;Data Source=SQLSERVERNAME 
<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 的輸出 」 一節。

此輸出可能當您收集整個網域,則是非常重要的。因此,如果要限制收集到的資訊給特定的使用者名稱,請使用下列語法,其中 使用者名稱 為使用者名稱及 betaland 是您所查詢的網域:
ldifde-d"CN =使用者名稱(哥倫比亞特區) =betaland"-l servicePrincipalName-F NewoutputUsers.txt
針對特定使用者可大幅減少收集資訊您必須搜尋的資料。如果您要收集整個的資訊網域中搜尋特定的使用者名稱有問題的伺服器。在輸出範例中,您會看到:
  • 對於伺服器,就不再存在,但不是項目從 Active Directory 完全移除。
  • 使用者"使用者名稱"都有效SPN 十個不同的伺服器資訊。
此外,您可以使用 「 使用中的目錄服務這些介面 (ADSI) 工具,以修正無效的 Active Directory 項目。

警告如果您使用 [Adsi 編輯器] 嵌入式管理單元、 LDP 公用程式,或任何其他LDAP 第 3 版用戶端,而且您錯誤地修改作用中的屬性目錄物件,您可能會造成嚴重的問題。這些問題可能會需要您必須重新安裝 Microsoft Windows 2000 Server 中,Microsoft Windows Server 2003,Microsoft Exchange 2000 Server、 Microsoft Exchange Server 2003 中或這兩個視窗和交換。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如何啟用 Kerberos 事件記錄
321708 如何在 Windows 2000 中使用 「 網路診斷 」 工具 (Netdiag.exe)
326985 如何疑難排解與 Kerberos 相關的問題,在 IIS 中
244474 若要強制使用 TCP,而非 Windows Server 2003 中、 在 Windows XP 中,以及在 Windows 2000 的 UDP Kerberos 的方式

屬性

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

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com