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