文章目錄
- 步驟1:
- 步驟2:
- 步驟3:
- 步驟4
- 步驟5
- 步驟6
參考文獻
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=comchangetype: addservicePrincipalName: MSSQLSvc/WUW-W7.msft.com:1433servicePrincipalName: MSSQLSvc/WUW-W7.msft.com
我在自己的output.txt檔案中確實找到了如下資訊,但是沒有找到sanzhang這個域賬戶的資訊,只有如下所示的spn資訊
dn: CN=San Zhang,CN=Users,DC=msft,DC=comchangetype: 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.Employeesselect * 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的完整配置。