SQL Server配置delegation实现double-hop
參考文獻
SQL Kerberos的原理及實驗
SQL Server native client與sqlcmd單獨安裝
前言
在上一篇博客SQL Kerberos的原理及實驗中講到了windows驗證的兩種模式分別是NTLM和Kerberos,那么他們有何區別,在功能上又有何不同。
NTLM是一種比較簡單的方法,能夠在大部分情況下完成任務。但是它只能完成單躍點認證(只有一個客戶端和一個SQL Server服務器)。有些情況下有雙躍點(double hop)甚至多躍點的認證需求,這時候就需要用到Kerberos技術。例如,一個用戶利用IE瀏覽器訪問有數據庫連接腳本的網頁,連接配置為使用它自己的Windows賬號建立。這時候就需要IIS對這個用戶運行IE瀏覽器的安全上下文(Security Context)首先做認證。通過認證后,再將它傳遞到SQL Server服務上,SQL Server服務再次認證,確認它有訪問SQL Server數據庫的權力。這個在IIS服務上完成的身份傳遞,我們稱為雙躍點,或者是Delegation(委托)(由客戶端委托IIS做身份的傳遞)。還有一種常見的情況,就是在SQL Server上建立一個鏈接服務器(Linked Server),當配制安全的時候,選擇的是使用當前用戶的安全上下文登錄目標鏈接服務器(Be made using the login's current security context)(見圖5-24)。在這種選擇下,本地的SQL Server也會做一次雙躍點,把客戶端的安全上下文傳遞到遠端的SQL Server服務器上。
正文
本文主要講解如何配置delegation,delegation的前提條件就是已經配置好了Kerberos驗證,具體方法參考前一篇博客SQL Kerberos的原理及實驗。
實驗環境還是前面的提到的三臺機器,分別是DC->SANZ-W7(做躍遷節點)->WUW-W7。其中SANZ-W7使用local system啟動sql server服務,而WUW-W7使用域賬戶wuwang啟動sql server服務。之所以提到這一點,是因為我們在后面會看到使用WUW-W7做躍遷節點的時候,在DC上做delegation查詢時會報錯,而使用SANZ-W7做躍遷節點卻成功,具體報錯內容如下:
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.
下面我們講解如何配置delegation,kerberos配置省略。
步驟1:
首先在DC中的computer找到DC,SANZ-W7和WUW-W7,將其配置成“Trust this computer for delegation to any service (Kerberos only)”,如下圖所示:
步驟2:
將DC上用戶進行delegation查詢的域賬戶administrator的“Account is sensitive and cannot be delegated”屬性關閉,也就是不選,如下圖所示:
步驟3:
回到DC上,驗證SPN已經在了,我的域名是msft,我們在命令行中執行如下命令:
ldifde -d "CN=Users,DC=toppest,DC=com" -l servicePrincipalName -F output.txt執行結果如下圖所示:
然后我們可以在C:\Users\Administrator下找到這個output.txt文件。然后確認SQL Server的啟動賬號wuwang下,有兩個SQL Server的SPN,并且沒有其他賬戶注冊相同的SPN。
dn: CN=Wu Wang,CN=Users,DC=msft,DC=com changetype: add servicePrincipalName: MSSQLSvc/WUW-W7.msft.com:1433 servicePrincipalName: MSSQLSvc/WUW-W7.msft.com我在自己的output.txt文件中確實找到了如下信息,但是沒有找到sanzhang這個域賬戶的信息,只有如下所示的spn信息
dn: CN=San Zhang,CN=Users,DC=msft,DC=com changetype: add這可能就是使用域賬戶啟動服務和使用local system啟動sql server的區別吧。也真是因為在output.txt中沒有sanzhang的spn注冊信息,所以才有前面提到的不能使用WUW-W7作為躍遷節點。因為DC在進行delegation的時候,最后一個節點必須是域賬戶注冊spn的,也就是能夠在output.txt上找到spn信息的節點。
步驟4
在DC的找到wuwang和sanzhang賬號,確認它在Delegation這個選項卡里,選擇了“Trust this user for delegation to any service (Kerberos only)”,我發現我這里只有wuwang賬戶有delegation選項,如下圖所示:
步驟5
我們在躍遷節點SANZ-W7上建立一個連接服務器Linked Server,用來連接WUW-W7這個服務器,創建連接服務器的sql代碼如下所示:
--刪除服務器 Exec sp_dropserver WANGWU--創建鏈接服務器 EXEC sp_addlinkedserver@server='WANGWU',--被訪問的服務器別名 @srvproduct='',@provider='SQLOLEDB',@datasrc='WUW-W7' --要訪問的服務器--測試查詢 select * from WANGWU.InsideTSQL2008.HR.Employees select * from WANGWU.InsideTSQL2008.Sales.Orders步驟6
我們要進行delegation,相當于是DC通過SANZ-W7來訪問WUW-W7,所以我們必須在WUW-W7中將DC的用戶administrator添加到windows驗證的login中,并且賦予查詢測試數據庫InsideTSQL2008的權限。
如果你的DC沒有安裝sql server,你只需要安裝sql server native client和sqlcmd就可以連接數據庫了,具體方法參考博客:SQL Server native client與sqlcmd單獨安裝?。
在DC中使用sqlcmd連接躍遷節點SANZ-W7,連接代碼如下:
sqlcmd -S SANZ-W7 -E此時我們去查看SANZ-W7的安全日志(Event View->Windows log->Security),我們會發現有一個從DC\Administrator的訪問,并且使用Kerberos驗證,如下圖所示:
接著我們通過鏈接服務器連接WUW-W7這個數據庫,代碼如下圖所示:
運行完上述命令以后會得到查詢結果,彼此我們去查看WUW-W7的安全日志,會發現多了一條從administrator過來的kerberos驗證登陸,跟前面的安全日志一樣。
綜上,我們就完整了delegation的完整配置。
?
?
?本文轉自xwdreamer博客園博客,原文鏈接:http://www.cnblogs.com/xwdreamer/archive/2012/08/12/2634184.html,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的SQL Server配置delegation实现double-hop的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java文件传输
- 下一篇: 【译】Typeof null 的历史