Chapter 1 Securing Your Server and Network(2):管理服務的SIDs,securingsids
原文出處:http://blog.csdn.net/dba_huangzj/article/details/37927319 ,專題目錄:http://blog.csdn.net/dba_huangzj/article/details/37906349
未經作者同意,任何人不得以“原創”形式發布,也不得已用於商業用途,本人不負責任何法律責任。
前一篇:http://blog.csdn.net/dba_huangzj/article/details/37924127
前言:
像SQL Server這種運行在一個Windows 帳號的安全上下文下的服務,如果還有其他服務使用相同的Windows帳號運行,那麼這些服務(非SQL Server)將可能訪問一些非預期資源,如檔案和檔案夾上的Access Control List(ACL/存取控制清單),並進行一些不應該有的操作,這些明顯是不合理的。
從Windows Server 2008 開始,微軟引入一個叫“服務SID”的概念,每個服務都一個Security Identifier(安全標識)。通過SID,可以針對特定服務建立一個能用於Windows 安全性模式下的標識。這個標識同時可以使得使用相同帳號或者內建帳號的每個服務許可權都不一樣。
每個服務的SID會在安裝在Windows Server 2008過程中啟用,並授予許可權。
實現:
下面使用命令列工具查看現有的SID,並為特定服務建立:
1. 開啟命令列工具(CMD.EXE)
2.輸入命令:
sc qsidtype mssql$sql2012 --mssql$sql2012 為具名執行個體名,如果是預設執行個體,可以使用mssqlserver
下面兩個圖分別是具名執行個體和預設執行個體的結果:
具名執行個體:本機具名執行個體為sql2012
預設執行個體:
針對上面的結果,SERVICE_SID_TYPE有三種可能的類型:
- NONE:該服務沒有SID。
- UNRESTRICTED:該服務有SID。
- RESTRICTED:該服務有SID並且有一個write-restriction 令牌(token)
3. 如果SERVICE_SID_TYPE為NONE,可以使用下面命令建立SID:
sc sidtype mssql$sql2012 UNRESTRICTED
如果使用User Account Control(UAC/使用者帳戶控制,在每次進行一個管理工作時偵聽),實現上面操作需要使用【以管理員身份運行】CMD命令或者用ctrl+x開啟。當SQL Server的SID啟用之後,所有SQL Server所在機器上的額外許可權(如備份目錄上的ACL、使用BULK INSERT命令進行檔案匯入等)都需要會使用SID,而不是SQL Server服務的運行帳號。
原理:
SQL Server服務的SID由服務和執行個體名派生出來。格式為NT SERVICE\MSSQLSERVER(預設執行個體)或NT SERVICE\MSSQL$<INSTANCENAME>(具名執行個體)。
對於SC命令的簡要解釋:
- sc.exe 命令用於與服務控制器互動。
- sc qsidtype命令查詢當前SID的狀態。
- sc sidtype提供修改功能。
如果你想移除SID,可以把服務改為NONE。而使用UNRESTRICTED建立一個SID。
注意:不要對SQL Server使用RESTRICTED 選項,因為這樣會導致SQL Server服務所需的某些資源被阻塞,從而導致SQL Server無法啟動。