1. 程式人生 > >SQL內建系統賬戶:Local system/Network service/Local Service 區別

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

參考文獻:

前言

今天在安裝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
那麼這些到底都有什麼區別呢,這些在下面的這篇文章有種介紹。

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

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

  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和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所得到,如下圖所示: