代码改变世界

SQL Server 2008中的Service SID 介绍

2013-11-07 15:41  很大很老实  阅读(989)  评论(0编辑  收藏  举报

【介绍】

我们打开SQL Server 2008 Management Studio, 会发现有如下几个登录: NT SERVICE\ClusSvc, NT SERVICE\MSSQL$KATMAI和 NT SERVICE\SQLAgent$KATMAI,这几个登录在安装SQL Server的时候,就会被创建。(其中NT SERVICE\ClusSvc则只有在群集环境下被创建)。我们这里介绍一下这些登录,有什么用途,对我们系统的安全性有什么影响,我们能否把他们删除,以及删除掉的后果是什么。

 

 

【SERVICE SID的引入】

NT SERVICE\MSSQL$KATMAI, NT SERVICE\SQLAgent$KATMAI和NT SERVICE\ClusSvc 其实都是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也是不同的。

所以,我们这里的一些logins,并不是Windows Users或Group的名字, 而是SID的名字。其相对应的SID值,我们可以用命令 sc  showsid serviceName所得到。如下:

 

【SQL Server Agent的启动帐号是否需要sysadmin的权限】

如果操作系统是Windows 2003或者SQL Server 版本低于SQL Server 2008,那么SQL Server Agent的启动帐号需要sysadmin权限,否则SQL Server Agent无法启动。但是对于SQL Server 2008 在Windows 2008上面,我们发现,表面看来,似乎并不一定需要这个权限。

SID NT SERVICE\SQLAgent$KATMAI

Service Account login CONTOSO\sqlu

效果

有,并且是sysadmin

有,并且是sysadmin

SQL Agent能正常启动

有,并且是sysadmin

有,但取消sysadmin权限

SQLAgent能正常启动

有,并且是sysadmin

删除

SQLAgent能正常启动

有,但不是sysadmin

有,并且是sysadmin

SQLAgent能正常启动

有,但不是sysadmin

有,但取消sysadmin权限

SQLAgent无法启动

有,但不是sysadmin

删除

SQLAgent无法启动

删除

有,并且是sysadmin

SQLAgent能正常启动

删除

有,但取消sysadmin权限

SQLAgent无法启动

删除

删除

SQLAgent无法启动

 

但是上述的结果表明,或者SID [NT SERVICE\SQLAgent$KATMAI]或者Agent Service Account (CONTOSO\sqlu) 其中之一必须要有sysadmin权限。否则SQLAgent这个服务就不能正常启动。也就是说,SQL Server Agent通过NT SERVICE\SQLAgent$KATMAI或CONTOSO\sqlu来登录SQL Server。Sysadmin的权限还是需要的。

【群集环境中,是否需要NT AUTHORITY\SYSTEM登录】

我们知道,在群集环境中,Cluster服务会对SQL Server每隔一分钟做一次ISALIVE检查。ISALIVE检查是通过群集服务帐号进行的。在Windows 2008环境下,群集服务是通过Local System也就是NT AUTHORITY\SYSTEM来连数据库的。

我们有时候会发现,把登录NT AUTHORITY\SYSTEM删除,ISALIVE检查也能够成功。这是因为在我们的登录中,有NT SERVICE\ClusSvc这个SID名,所以,群集服务的ISALIVE检查通过NT AUTHRORITY\SYSTEM或NT SERVICE\ClusSvc来登录SQL Server。

【NT SERVICE\MSSQL$KATMAI】

我们可能会有需要要更改SQL Server的服务启动帐号。更改SQL Server的服务启动帐号会涉及到一系列权限的变更。但是如果有NT SERVICE\MSSQL$KATMAI这个服务SID,那么权限的变更会变得最小,因为即使服务启动帐号有变化,但是服务的SID不会有变化。涉及到服务启动帐号的登录应用还是能够正常工作。

 

【小结】

NT SERVICE\MSSQL$KATMAI, NT SERVICE\SQLAgent$KATMAI和NT SERVICE\ClusSvc服务SID能够使得我们的安全管理更加便利。这几个登录在安装SQL Server的时候就会被创建。添加这几个login对安全没有什么副作用。能使得我们的安全管理更加方便。

但是我们也不能认为有这几个SID的帐号,就能随便把其他的登录如NT AUTHORITY\SYSTEM给删除。某些应用,如VSS Writer ,Windows自动更新等,还是需要用服务启动帐号来进行处理。