本文属于SQL Server安全专题系列


 在安装SQL Server时,很重要的一步就是选择所需的服务,由于每个服务必须有一个服务帐号,所以也就需要帐号的选择和配置,应该坚持最小所需权限原则。最小所需权限原则应该针对日常运行所需来制定,如果偶发性的需求,可以临时提权但是记住要用完后马上降权。
 下表列出了常规服务帐号的基本所需权限,当然只是“基本”的,如果需要进行额外操作,也可以适当搭配。

服务 用户权限分配 文件及文件夹权限
数据库引擎
  • 以服务身份登录
  • 替换进程级别标记(token)
  • 跳过遍历检查
  • 调整进程内存配额
  • 启动SQL Writer
  • 读取事件日志服务
  • 读取RPC服务

Instid\MSSQL\backup

完全控制

Instid\MSSQL\binn

读取和执行

Instid\MSSQL\data

完全控制

Instid\MSSQL\FTData

完全控制

Instid\MSSQL\Install

读取和执行

Instid\MSSQL\Log

完全控制

Instid\MSSQL\Repldata

完全控制

130\shared

读取和执行

Instid\MSSQL\Template Data(仅限 SQL Server Express)

读取


SQL Agent
  • 以服务身份登录
  • 替换进程级别标记(token)
  • 跳过遍历检查
  • 调整进程内存配额

Instid\MSSQL\binn

完全控制

Instid\MSSQL\binn

完全控制

Instid\MSSQL\Log

读取、写入、删除和执行

130\com

读取和执行

130\shared

读取和执行

130\shared\Errordumps

读取和写入

ServerName\EventLog

完全控制


SSAS
  • 以服务身份登录
  • 增加进程工作集(仅适用于表格)
  • 调整进程内存配额(仅适用于表格)
  • 锁定内存页(仅适用于表格)
  • 提高计划优先级(仅适用于表格)

130\shared\ASConfig

完全控制

Instid\OLAP

读取和执行

Instid\Olap\Data

完全控制

Instid\Olap\Log

读取和写入

Instid\OLAP\Backup

读取和写入

Instid\OLAP\Temp

读取和写入

130\shared\Errordumps

读取和写入


SSRS 以服务身份登录

Instid\Reporting Services\Log Files

读取、写入、删除

Instid\Reporting Services\ReportServer

读取和执行

Instid\Reportingservices\Reportserver\global.asax

完全控制

Instid\Reportingservices\Reportserver\Reportserver.config

读取

Instid\Reporting Services\reportManager

读取和执行

Instid\Reporting Services\RSTempfiles

读取、写入、执行、删除

130\shared

读取和执行

130\shared\Errordumps

读取和写入


SSIS
  • 以服务身份登录
  • 跳过遍历检查
  • 身份验证后模拟客户端
 
Full-Text
  • 以服务身份登录
  • 调整进程的内存配额
  • 跳过遍历检查
 
SQL Browser 以服务身份登录

130\shared\ASConfig

读取

130\shared

读取和执行

130\shared\Errordumps

读取和写入


SQL Server Distributed Replay 控制器 以服务身份登录

<ToolsDir>\DReplayController\Log\(空目录)

读取、执行和列出文件夹内容

<ToolsDir>\DReplayController\DReplayController.exe

读取、执行和列出文件夹内容

<ToolsDir>\DReplayController\resources\

读取、执行和列出文件夹内容

<ToolsDir>\DReplayController\{all dlls}

读取、执行和列出文件夹内容

<ToolsDir>\DReplayController\DReplayController.config

读取、执行和列出文件夹内容

<ToolsDir>\DReplayController\IRTemplate.tdf

读取、执行和列出文件夹内容

<ToolsDir>\DReplayController\IRDefinition.xml

读取、执行和列出文件夹内容


SQL Server Distributed Replay 客户端 以服务身份登录

<ToolsDir>\DReplayClient\Log\

读取、执行和列出文件夹内容

<ToolsDir>\DReplayClient\DReplayClient.exe

读取、执行和列出文件夹内容

<ToolsDir>\DReplayClient\resources\

读取、执行和列出文件夹内容

<ToolsDir>\DReplayClient\ (all dlls)

读取、执行和列出文件夹内容

<ToolsDir>\DReplayClient\DReplayClient.config

读取、执行和列出文件夹内容

<ToolsDir>\DReplayClient\IRTemplate.tdf

读取、执行和列出文件夹内容

<ToolsDir>\DReplayClient\IRDefinition.xml

读取、执行和列出文件夹内容


PolyBase 引擎和 DMS 以服务身份登录  
R 服务:SQLRUserGroup 允许在本地登录  


 绝大部分情况下都建议使用SQL Server配置管理器进行配置,但是如果同时装了多版本的SQL Server,可能不方便查找配置管理器,下面列出常见的配置管理器路径以供备用:


SQL Server版本 配置管理器路径
SQL Server 2016 C:\Windows\SysWOW64\SQLServerManager13.msc
SQL Server 2014 C:\Windows\SysWOW64\SQLServerManager12.msc
SQL Server 2012 C:\Windows\SysWOW64\SQLServerManager11.msc
SQL Server 2008 C:\Windows\SysWOW64\SQLServerManager10.msc
 又到了大家最喜欢的最佳实践,不过我不是非常喜欢,因为在面向搜索引擎编程及快餐文化盛行的今天,由于缺乏对问题的思考,大部分人把最佳实践当作唯一方式来全盘照抄,从我用词上面大家应该懂得。不喜欢归不喜欢,还是有必要列一下:

何时使用域帐号:


1. 需要和其他网络中的服务器、服务或资源交互
2. 使用Linked server(链接服务器)访问网络中的服务器
则可以使用低权限的域用户来运行SQL 引擎服务。但是Windows域管理员应该对其进行严格管控。


何时使用NETWORK SERVICE帐号:

 别想了。这个帐号也会被本机运行其他服务,只是比本地用户组具有更多的网络资源访问权限。用这个帐号来运行SQL 服务,需要用证书来访问网络资源。麻烦。


何时使用LOCAL USER帐号:

1. 不需要跟网络中的其他服务器、服务或资源交互,可以使用低权限本地用户帐号来运行。
注意:不建议使用具有管理特权的本地用户运行SQL Server服务,对于即时文件初始化功能,可以额外授权。


何时使用LOCAL SYSTEM帐号:


最好不要,因为它的权限过大。


总结:


 如果环境在域中,优先选择域帐号作为服务帐号,并且配置低权限,不够才提权,如果是完全独立的服务器,在保证外围安全的前提下,使用LOCAL User,要是想省事,用LOCAL SYSTEM也不是不可以。
 但是,又要保证SQL Server对数据、日志和备份目录具有完全控制权限。








本文转载:CSDN博客