SQL Server配置delegation實現double-hop

來源:互聯網
上載者:User
文章目錄
  • 步驟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的完整配置。

 

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.