Chapter 1 Securing Your Server and Network(2):管理服务的SIDs
未经作者允许,不论什么人不得以“原创”形式公布,也不得已用于商业用途,本人不负责不论什么法律责任。
前一篇: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无法启动。
下一篇:http://blog.csdn.net/dba_huangzj/article/details/38017703