天天看點

内置系統賬戶:Local system/Network service/Local Service 差別

<a href="http://www.cnblogs.com/xianspace/archive/2009/04/05/1429835.html">http://www.cnblogs.com/xianspace/archive/2009/04/05/1429835.html</a>

今天在安裝sqlserver2008 r2的時候,在Server Configuration階段要求我設定sqlserver中各種服務的賬戶名稱,如下圖所示:

賬戶類型可以在後期修改,改的就是服務中的log on as裡面的屬性。

那麼Local system/Network service/Local Service這三種賬戶有什麼差別呢?

LocalSystem是預設的擁有本機所有權限的本地賬戶,這個賬戶跟通常的使用者賬戶沒有任何關聯,也沒有使用者名和密碼之類的憑證。這個服務賬戶可以打開系統資料庫的HKEY_LOCAL_MACHINE\Security鍵,當LocalSystem通路網絡資源時,它是作為計算機的域賬戶使用的。 

舉例來說,以LocalSystem賬戶運作的服務主要有:WindowsUpdate   Client、   Clipbook、Com+、DHCP   Client、Messenger   Service、Task   Scheduler、Server   Service、Workstation   Service,還有Windows   Installer。 

Network   Service賬戶是預設的擁有本機部分權限的本地賬戶,它能夠以計算機的名義通路網絡資源。但是他沒有Local   System   那麼多的權限,以這個賬戶運作的服務會根據實際環境把通路憑據送出給遠端的計算機。Network   Service賬戶通常可以通路Network   Service、Everyone組,還有認證使用者有權限通路的資源。

舉例來說,以Network   Service賬戶運作的服務主要有:Distributed   Transaction   Coordinator、DNS   Client、Performance   Logs   and   Alerts,還有RPC   Locator。

Local   Service賬戶是預設的擁有最小權限的本地賬戶,并在網絡憑證中具有匿名的身份。Local   Service賬戶通常可以通路Local   Service、Everyone組還有認證使用者有權限通路的資源。

舉例來說,以Local   Service賬戶運作的服務主要有:Alerter、Remote   Registry、Smart   Card、SSDP,還有WebClient。

Local   system   :本地系統使用者,   個人電腦通常選擇這個使用者 

Network   service   :網絡服務使用者,   通常需要遠端連接配接的都使用這個 

Local   Service   :本地服務 

另外還有一個要求輸入使用者名密碼的那個使用者是域使用者,這個是做叢集的時候選擇的登陸方式

今天在安裝APEXSQL的時候,能夠成功安裝,但是不能連接配接資料庫,每次都讓我建立一個administration的賬戶,但是我建立了,加入到了administrators組還是不能連接配接,最後在SQL Server的properties中,将賬戶有network service 改為local system就可以連接配接了。

之是以要使用local system是因為apexsql裡面要用到一些系統底層的東西,所有要求最高權限。

如果我們打開任務管理器,在user name那一列我們能夠看到很多賬戶名,常見的有以下幾類

1.) SYSTEM

2.) NETWORK SERVICE

3.) Domain Users

4.) LOCAL SERVICE

那麼這些到底都有什麼差別呢,這些在下面的這篇文章有種介紹。

<a href="http://www.vistaheads.com/forums/microsoft-public-windows-vista-general/86838-what-system-network-service-account.html">http://www.vistaheads.com/forums/microsoft-public-windows-vista-general/86838-what-system-network-service-account.html</a>

那麼應該使用什麼賬戶來啟動sql server呢?下面這篇文章給出了詳細的介紹。

<a href="http://social.msdn.microsoft.com/Forums/en/sqlsecurity/thread/31d57870-1faa-4e14-8527-ce77b1ff40e4">http://social.msdn.microsoft.com/Forums/en/sqlsecurity/thread/31d57870-1faa-4e14-8527-ce77b1ff40e4</a>

我來總結一下上面這篇文章的中心思想。

不用使用bulit-in的三張賬号來啟動sql server。

local system的權限太高了,如果sql server 被黑客入侵,建立一個thread,那麼這個thread就具有和sqlservr.exe這個程序相同的權限,這個thread可以在本機上做任何操作。還有一個弊端就是local system隻有在本機上有很高的權限,但是出了本機,就沒有什麼權限了,比如要做DB Mirroring的時候,使用local system就不行。

network service相對于local system在本機上權限少了一點,但是他可以通路網絡資源,比如可以做DB Mirroring,但是有一個不好就是他的權限還是弱了一點。network service使用的是computer account。

至于local service,他是權限最小的一個built-in賬戶,隻能用于啟動本地服務,sql browser建議使用local service。這在在msdn上也有提到,給sqlbrowser.exe一個較低權限的賬戶。

sql server啟動賬戶的最佳事件就是使用authenticated user。如果機器在domain裡面,那麼使用domain user,如果沒有在domain裡面就使用local user。不亂是domain user還是local user都需要給予特定的權限,權限不要太高。

在我們安裝完sql server 2008和2012以後,我們會發現在security下面的login中有類似NT Service\MSSQL$SQL2012、NT SERVICE\ReportServer$SQL2012和NT SERVICE\SQLAgent$SQL2012這樣子的賬戶。這些其實都是Service SID所對應的名字。

Service SID的引入,是為了解決多個Service可能同用一個service帳号啟動所帶來的安全隐患。如IIS 使用Network Service帳号,可能其他服務也使用Network Service帳号。為了使得IIS能夠連接配接到SQL Server, 我們可能會把Network Service作為SQL Server的login, 但是這是不安全的。因為其他服務如果以Network Service做為啟動帳号的話,也能通路SQL Server。為了解決這個問題,在SQL Server 2008/Windows Server 2008及以後,我們有了SID這個概念。這樣不同的服務,即使服務啟動帳号是相同的,它們的SID也是不同的。

對于NT Service\MSSQL$SQL2012、NT SERVICE\ReportServer$SQL2012和NT SERVICE\SQLAgent$SQL2012這些login,并不是Windows Users或Group的名字, 而是SID的名字。其相對應的SID值,我們可以用指令 sc  showsid serviceName所得到,如下圖所示:

 本文轉自xwdreamer部落格園部落格,原文連結:http://www.cnblogs.com/xwdreamer/archive/2012/07/03/2574747.html,如需轉載請自行聯系原作者