在安装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对数据、日志和备份目录具有完全控制权限。