程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 內置系統賬戶:Local system/Network service/Local Service 區別

內置系統賬戶:Local system/Network service/Local Service 區別

編輯:關於SqlServer

參考文獻:

http://hovertree.com/h/bjaf/h6h1tk23.htm

前言

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

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

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

LocalSystem   賬戶 

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   賬戶 

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賬戶通常可以訪問Local   Service、Everyone組還有認證用戶有權限訪問的資源。

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

簡單說明:

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

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

Local   Service   :本地服務 

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

PS:2012-7-10

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

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

PS:2012-8-24

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

1.) SYSTEM
2.) NETWORK SERVICE
3.) Domain Users
4.) LOCAL SERVICE
那麼這些到底都有什麼區別呢,這些在下面的這篇文章有種介紹。

http://www.vistaheads.com/forums/microsoft-public-windows-vista-general/86838-what-system-network-service-account.html

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

http://social.msdn.microsoft.com/Forums/en/sqlsecurity/thread/31d57870-1faa-4e14-8527-ce77b1ff40e4

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

  1. 不用使用bulit-in的三張賬號來啟動sql server。
  2. local system的權限太高了,如果sql server 被黑客入侵,創建一個thread,那麼這個thread就具有和sqlservr.exe這個進程相同的權限,這個thread可以在本機上做任何操作。還有一個弊端就是local system只有在本機上有很高的權限,但是出了本機,就沒有什麼權限了,比如要做DB Mirroring的時候,使用local system就不行。
  3. network service相對於local system在本機上權限少了一點,但是他可以訪問網絡資源,比如可以做DB Mirroring,但是有一個不好就是他的權限還是弱了一點。network service使用的是computer account。
  4. 至於local service,他是權限最小的一個built-in賬戶,只能用於啟動本地服務,sql browser建議使用local service。這在在msdn上也有提到,給sqlbrowser.exe一個較低權限的賬戶。
  5. sql server啟動賬戶的最佳事件就是使用authenticated user。如果機器在domain裡面,那麼使用domain user,如果沒有在domain裡面就使用local user。不亂是domain user還是local user都需要給予特定的權限,權限不要太高。

參考:SQL Server 2008中的Service SID 

在我們安裝完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所得到,如下圖所示:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved