原文出处: ,专题目录:
未经作者同意,任何人不得以“原创”形式发布,也不得已用于商业用途,本人不负责任何法律责任。
前一篇:
前言:
像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无法启动。
下一篇: