配置 Windows 服务帐户和权限
适用范围:SQL Server
SQL Server 中的每个服务表示一个或一组进程,用于通过 Windows 管理 SQL Server 操作的身份验证。 本文描述此版本 SQL Server 中服务的默认配置,还介绍在 SQL Server 安装期间及安装后设置的 SQL Server 服务的配置选项。 本文将帮助高级用户了解服务帐户的详细信息。
大多数服务及其属性可通过使用 SQL Server 配置管理器进行配置。 以下是在 C 盘上安装 Windows 时的最新版本的路径。
SQL Server 版本 | 路径 |
---|---|
SQL Server 2022 (16.x) | C:\Windows\SysWOW64\SQLServerManager16.msc |
SQL Server 2019 (15.x) | C:\Windows\SysWOW64\SQLServerManager15.msc |
SQL Server 2017 (14.x) | C:\Windows\SysWOW64\SQLServerManager14.msc |
SQL Server 2016 (13.x) | C:\Windows\SysWOW64\SQLServerManager13.msc |
SQL Server 2014 | C:\Windows\SysWOW64\SQLServerManager12.msc |
SQL Server 2012 | C:\Windows\SysWOW64\SQLServerManager11.msc |
已启用 Azure Arc 的 SQL Server
有关适用于 SQL Server 的 Azure 扩展所需的权限,请参阅 配置适用于 SQL Server 的 Azure 扩展的 Windows 服务帐户和权限。
SQL Server 安装的服务
根据你决定安装的组件,SQL Server 安装程序将安装以下服务:
服务 | 说明 |
---|---|
SQL Server 数据库服务 | SQL Server 关系数据库引擎的服务。 可执行文件为 \<MSSQLPATH>\MSSQL\Binn\sqlservr.exe 。 |
SQL Server 代理 | 执行作业、监视 SQL Server、激发警报,以及支持自动执行某些管理任务。 SQL Server Express 的实例上存在 SQL Server 代理服务,但它处于禁用状态。 可执行文件为 \<MSSQLPATH>\MSSQL\Binn\sqlagent.exe 。 |
Analysis Services | 为商业智能应用程序提供联机分析处理 (OLAP) 和数据挖掘功能。 可执行文件为 \<MSSQLPATH>\OLAP\Bin\msmdsrv.exe 。 |
Reporting Services | 管理、执行、创建、计划和传递报表。 可执行文件为 \<MSSQLPATH>\Reporting Services\ReportServer\Bin\ReportingServicesService.exe 。 |
Integration Services | 为 Integration Services 包的存储和执行提供管理支持。 可执行文件路径为 \<MSSQLPATH>\150\DTS\Binn\MsDtsSrvr.exe 。 |
Integration Services 可能包括其他用于横向扩展部署的服务。 有关详细信息,请参阅演练:安装 Integration Services (SSIS) Scale Out。
服务 | 说明 |
---|---|
SQL Server Browser | 向客户端计算机提供 SQL Server 连接信息的名称解析服务。 可执行文件路径为 C:\Program Files (x86)\Microsoft SQL Server\90\Shared\sqlbrowser.exe |
全文搜索 | 对结构化和半结构化数据的内容和属性快速创建全文索引,从而为 SQL Server 提供文档筛选和断字功能。 |
SQL 编写器 | 允许备份和还原应用程序在卷影复制服务 (VSS) 框架中运行。 |
SQL Server Distributed Replay 控制器 | 跨多个 Distributed Replay 客户端计算机提供跟踪重播业务流程。 |
SQL Server Distributed Replay 客户端 | 与 Distributed Replay 控制器一起来模拟针对 SQL Server 数据库引擎实例的并发工作负载的一台或多台 Distributed Replay 客户端计算机。 |
SQL Server Launchpad | 用于托管 Microsoft 提供的外部可执行文件的可信服务,例如作为 R Services 或机器学习服务的一部分安装的 R 或 Python 运行时。 附属进程可由启动板进程启动,但根据单个实例的配置进行资源调控。 启动板服务在其自己的用户帐户下运行,特定注册运行时的各个附属进程会继承启动板的用户帐户。 附属进程将在执行过程中按需创建和销毁。 如果安装 SQL Server 的计算机同时用作域控制器,则启动板无法创建其自己使用的帐户。 因此无法在作用域控制器上安装 R Services(数据库内)或机器学习服务(数据库内)。 |
SQL Server PolyBase 引擎 | 提供对外部数据源的分布式查询功能。 |
SQL Server PolyBase 数据移动服务 | 支持在 SQL Server 和外部数据源之间以及在 PolyBase 横向扩展组中的 SQL 节点之间移动数据。 |
SQL Server 安装的 CEIP 服务
客户体验改善计划 (CEIP) 服务将遥测数据发送回 Microsoft。
根据你决定安装的组件,SQL Server 安装程序将安装以下 CEIP 服务。
服务 | 说明 |
---|---|
SQLTELEMETRY | 将数据库引擎遥测数据发送回 Microsoft 的客户体验改善计划。 |
SSASTELEMETRY | 将 SSAS 遥测数据发送回 Microsoft 的客户体验改善计划。 |
SSISTELEMETRY | 将 SSIS 遥测数据发送回 Microsoft 的客户体验改善计划。 |
服务属性和配置
用于启动和运行 SQL Server 的启动帐户可以是域用户帐户、本地用户帐户、托管服务帐户、虚拟帐户或内置系统帐户。 若要启动和运行 SQL Server 中的每项服务,这些服务都必须有一个在安装过程中配置的启动帐户。
此部分介绍可配置为启动 SQL Server 服务的帐户、SQL Server 安装程序使用的默认值、Per-service SID 的概念、启动选项以及配置防火墙。
默认服务帐户
下表列出了安装程序在安装所有组件时使用的默认服务帐户。 列出的默认帐户是建议使用的帐户,但特殊注明的除外。
独立服务器或域控制器
组件 | Windows Server 2008 | Windows 7、Windows Server 2008 R2 及更高版本 |
---|---|---|
数据库引擎 | NETWORK SERVICE | 虚拟帐户 1 |
SQL Server 代理 | NETWORK SERVICE | 虚拟帐户 1 |
SSAS | NETWORK SERVICE | 虚拟帐户 1 2 |
SSIS | NETWORK SERVICE | 虚拟帐户 1 |
SSRS | NETWORK SERVICE | 虚拟帐户 1 |
SQL Server Distributed Replay 控制器 | NETWORK SERVICE | 虚拟帐户 1 |
SQL Server Distributed Replay 客户端 | NETWORK SERVICE | 虚拟帐户 1 |
FD 启动器(全文搜索) | LOCAL SERVICE | 虚拟帐户 |
SQL Server Browser | LOCAL SERVICE | LOCAL SERVICE |
SQL Server VSS 编写器 | LOCAL SYSTEM | LOCAL SYSTEM |
高级分析扩展 | NTSERVICE\MSSQLLaunchpad | NTSERVICE\MSSQLLaunchpad |
PolyBase 引擎 | NETWORK SERVICE | NETWORK SERVICE |
PolyBase 数据移动服务 | NETWORK SERVICE | NETWORK SERVICE |
1 当需要 SQL Server 计算机外部的资源时,Microsoft 建议使用配置了必需的最小特权的托管服务帐户 (MSA)。
2 在域控制器上安装时,不支持将虚拟帐户用作服务帐户。
SQL Server 故障转移群集实例
组件 | Windows Server 2008 | Windows Server 2008 R2 |
---|---|---|
数据库引擎 | 无。 提供 域用户 帐户。 | 提供 域用户 帐户。 |
SQL Server 代理 | 无。 提供 域用户 帐户。 | 提供 域用户 帐户。 |
SSAS | 无。 提供 域用户 帐户。 | 提供 域用户 帐户。 |
SSIS | NETWORK SERVICE | 虚拟帐户 |
SSRS | NETWORK SERVICE | 虚拟帐户 |
FD 启动器(全文搜索) | LOCAL SERVICE | 虚拟帐户 |
SQL Server Browser | LOCAL SERVICE | LOCAL SERVICE |
SQL Server VSS 编写器 | LOCAL SYSTEM | LOCAL SYSTEM |
更改帐户属性
重要
始终使用 SQL Server 工具(例如 SQL Server 配置管理器)来更改 SQL Server 数据库引擎 或 SQL Server 代理服务使用的帐户,或者更改帐户的密码。 除了更改帐户名称,SQL Server 配置管理器还可执行其他配置,例如,更新保护 数据库引擎 的服务主密钥的 Windows 本地安全存储区。 其他工具(例如 Windows 服务控制管理器)可更改帐户名称,但不更改所有必需的设置。
如果使用其他方式更改任何 SQL 服务的服务帐户,可能会导致意外行为或错误。 例如,如果使用 Windows 服务小程序将 SQL 代理服务帐户更改为域帐户,你可能会注意到使用操作系统 (Cmdexec)、复制或 SSIS 作业步骤的 SQL 代理作业可能会失败,并显示如下错误:
Executed as user : Domain\Account. The process could not be created for step Step Number of job Unique Job ID (reason: A required privilege is not held by the client). The step failed.
若要解决此错误,应使用 SQL Server 配置管理器执行以下操作:
- 暂时将 SQL 代理服务帐户更改回默认虚拟帐户(默认实例:NT Service\SQLSERVERAGENT。命名实例:NT Service\SQLAGENT$<instance_name>。)
- 重启 SQL Server 代理服务
- 将服务帐户更改回所需的域帐户
- 重启 SQL Server 代理服务
对于您在 SharePoint 场中部署的 Analysis Services 实例,始终使用 SharePoint 管理中心为 Power Pivot 服务 应用程序和 Analysis Services 服务更改服务器帐户。 使用管理中心时,关联的设置和权限将更新为使用新的帐户信息。
若要更改 Reporting Services 选项,请使用 Reporting Services 配置工具。
托管服务帐户、组托管服务帐户和虚拟帐户
托管服务帐户、组托管服务帐户和虚拟帐户设计用于向关键应用程序(例如 SQL Server)提供其自己帐户的隔离,同时使管理员无需手动管理这些帐户的服务主体名称 (SPN) 和凭据。 这就使得管理服务帐户用户、密码和 SPN 的过程变得简单得多。
-
托管服务帐户 (MSA) 是一种由域控制器创建和管理的域帐户。 它分配给单个成员计算机以用于运行服务。 域控制器将自动管理密码。 不能使用 MSA 登录到计算机,但计算机可使用 MSA 来启动 Windows 服务。 MSA 获得读写 servicePrincipalName 权限时,可在 Active Directory 中注册服务主体名称 (SPN)。 MSA 的名称中有一个
$
后缀,例如DOMAIN\ACCOUNTNAME$
。 在指定 MSA 时,请将密码留空。 由于一个 MSA 分配给一台计算机,因此它不能用于 Windows 群集的不同节点。备注
域管理员必须先在 Active Directory 中创建 MSA,然后 SQL Server 安装程序才能将其用于 SQL Server 服务。
-
组托管服务帐户 (gMSA) 是针对多个服务器的 MSA。 Windows 为在一组服务器上运行的服务管理服务帐户。 Active Directory 会自动更新组托管服务帐户密码,而不重启服务。 你可配置 SQL Server 服务来使用组托管服务帐户主体。 从 SQL Server 2014 开始,SQL Server 支持适用于独立实例的组管理服务帐户,而 SQL Server 2016 及更高版本还支持适用于故障转移群集实例和可用性组的组管理服务帐户。
若要使用 SQL Server 2014 或更高版本的 gMSA,操作系统必须是 Windows Server 2012 R2 或更高版本。 装有 Windows Server 2012 R2 的服务器需要应用 KB 2998082,以便服务可以在密码更改后立即登录而不中断。
有关详细信息,请参阅 Windows Server 2016 及更高版本的组托管服务帐户。 有关以前版本的 Windows Server,请参阅组托管服务帐户。
注意
域管理员必须先在 Active Directory 中创建 gMSA,然后 SQL Server 安装程序才能将其用于 SQL Server 服务。
-
虚拟帐户(从 Windows Server 2008 R2 和 Windows 7 开始)是“托管的本地帐户” ,此类帐户提供以下功能,可简化服务管理。 虚拟帐户是自动管理的,并且虚拟帐户可以访问域环境中的网络。 如果在安装 SQL Server 期间对服务帐户使用默认值,则会使用将实例名称用作服务名称的虚拟帐户,格式为
NT SERVICE\<SERVICENAME>
。 以虚拟帐户身份运行的服务通过使用计算机帐户的凭据(格式为<domain_name>\<computer_name>$
)访问网络资源。 当指定一个虚拟帐户来启动 SQL Server 时,应将密码留空。 如果虚拟帐户无法注册服务主体名称 (SPN),则手动注册该 SPN。 若要详细了解如何手动注册 SPN,请查看手动注册 SPN。注意
虚拟帐户不能用于 SQL Server 故障转移群集实例,因为虚拟帐户在群集的每个节点上的 SID 不相同。
下表列出了虚拟帐户名称的示例。
服务 虚拟帐户名称 数据库引擎 服务的默认实例 NT SERVICE\MSSQLSERVER
名为 数据库引擎 的 PAYROLL
服务的命名实例NT SERVICE\MSSQL$PAYROLL
SQL Server 的默认实例上的 SQL Server 代理服务 NT Service\SQLSERVERAGENT
名为 PAYROLL
的 SQL Server 实例上的 SQL Server 代理服务NT SERVICE\SQLAGENT$PAYROLL
有关托管服务帐户和虚拟帐户的详细信息,请参阅服务帐户分步指南的托管服务帐户和虚拟帐户概念部分以及托管服务帐户常见问题解答 (FAQ)。
注意
始终用尽可能低的用户权限运行 SQL Server 服务。 应尽可能使用 MSA、gMSA 或虚拟帐户。 如果无法使用 MSA、gMSA 和虚拟帐户,请在 SQL Server 服务中使用特定的低特权用户帐户或域帐户,而不是使用共享帐户。 对不同的 SQL Server 服务使用单独的帐户。 不要向 SQL Server 服务帐户或服务组授予其他权限。 如果支持服务 SID,则通过组成员身份将权限授予服务 SID 或者直接授权。
自动启动
除了具有用户帐户外,每项服务还有用户可控制的三种可能的启动状态:
- 已禁用。 服务已安装但当前未运行。
- 手动。 服务已安装,但仅当另一服务或应用程序需要其功能时才启动。
- 自动。 服务由操作系统自动启动。
在安装过程中,启动状态处于选中状态。 安装命名实例时,SQL Server Browser 服务应设置为自动启动。
在无人参与的安装过程中配置服务
下表显示了可在安装过程中配置的 SQL Server 服务。 对于无人参与的安装,可以在配置文件中或在命令提示符下使用开关。
SQL Server 服务名称 | 无人参与安装的开关 1 |
---|---|
MSSQLSERVER | SQLSVCACCOUNT、SQLSVCPASSWORD、SQLSVCSTARTUPTYPE |
SQLServerAgent 2 | AGTSVCACCOUNT、AGTSVCPASSWORD、AGTSVCSTARTUPTYPE |
MSSQLServerOLAPService | ASSVCACCOUNT、ASSVCPASSWORD、ASSVCSTARTUPTYPE |
ReportServer | RSSVCACCOUNT、RSSVCPASSWORD、RSSVCSTARTUPTYPE |
Integration Services | ISSVCACCOUNT、ISSVCPASSWORD、ISSVCSTARTUPTYPE |
SQL Server Distributed Replay 控制器 | DRU_CTLR、CTLRSVCACCOUNT、CTLRSVCPASSWORD、CTLRSTARTUPTYPE、CTLRUSERS |
SQL Server Distributed Replay 客户端 | DRU_CLT、CLTSVCACCOUNT、CLTSVCPASSWORD、CLTSTARTUPTYPE、CLTCTLRNAME、CLTWORKINGDIR、CLTRESULTDIR |
R Services 或机器学习服务 | EXTSVCACCOUNT、EXTSVCPASSWORD、ADVANCEDANALYTICS 3 |
PolyBase 引擎 | PBENGSVCACCOUNT、PBENGSVCPASSWORD、PBENGSVCSTARTUPTYPE、PBDMSSVCACCOUNT、PBDMSSVCPASSWORD、PBDMSSVCSTARTUPTYPE、PBSCALEOUT、PBPORTRANGE |
1 有关无人参与安装的详细信息和示例语法,请参阅从命令提示符安装 SQL Server。
2 SQL Server 代理服务在 SQL Server Express 的实例和具有高级服务的 SQL Server Express 实例上处于禁用状态。
3 当前不支持仅通过交换机设置启动板帐户。 请使用 SQL Server 配置管理器更改帐户或其他服务设置。
防火墙端口
在大多数情况下,首次安装时,可通过与 SQL Server 安装在相同计算机上的 SQL Server Management Studio 等此类工具连接 数据库引擎。 SQL Server 安装程序不会在 Windows 防火墙中打开端口。 在将 数据库引擎 配置为侦听 TCP 端口,并且在 Windows 防火墙中打开适当的端口进行连接之前,将无法从其他计算机建立连接。 有关详细信息,请参阅 配置 Windows 防火墙以允许 SQL Server 访问。
服务权限
此部分介绍了 SQL Server 安装程序为 SQL Server 服务的 Per-service SID 配置的权限。
- 服务配置和访问控制
- Windows 特权和权限
- 授予 SQL Server Per-service SID 或 SQL Server 本地 Windows 组的文件系统权限
- 授予其他 Windows 用户帐户或组的文件系统权限
- 与非寻常磁盘位置相关的文件系统权限
- 查看其他注意事项
- 注册表权限
- WMI
- 命名管道
服务配置和访问控制
SQL Server 会为其每项服务启用 Per-service SID,来提供深层服务隔离与防御。 Per-service SID 从服务名称派生得到,对该服务是唯一的。 例如,数据库引擎服务的命名实例的服务 SID 名称可能是 NT Service\MSSQL$<instance_name>
。 通过服务隔离,可直接访问特定的对象,而无需运行高特权帐户,也不会削弱为对象提供的安全保护水平。 通过使用包含服务 SID 的访问控制项,SQL Server 服务可限制对其资源的访问。
注意
在 Windows 7 和 Windows Server 2008 R2(及更高版本)上,Per-service SID 可以是服务使用的虚拟帐户。
对于大多数组件,SQL Server 直接为 Per-service 帐户配置 ACL,因此无需重复资源 ACL 过程即可更改此服务帐户。
当安装 SSAS时,将创建 Analysis Services 服务的 Per-service SID。 将创建本地 Windows 组,其名称格式为 SQLServerMSASUser$<computer_name>$<instance_name>
。 Per-service SID NT SERVICE\MSSQLServerOLAPService
已被授予本地 Windows 组中的成员资格,而本地 Windows 组在 ACL 中被授予了适当的权限。 如果更改了用来启动 Analysis Services 服务的帐户,SQL Server 配置管理器必须更改某些 Windows 权限(如作为服务登录的权限),但分配给本地 Windows 组的权限将仍可用且没有任何更新,因为 Per-service SID 没发生变化。 此方法允许在升级过程中重命名 Analysis Services 服务。
在SQL Server安装期间,SQL Server安装程序会为 SSAS 和 SQL Server Browser 服务创建本地 Windows 组。 对于这些服务,SQL Server 将为此本地 Windows 组配置 ACL。
在安装或升级期间,系统可能会将服务或服务 SID 的服务帐户添加为服务组的成员,具体取决于服务配置。
Windows 特权和权限
为启动服务分配的帐户需要对于服务的 启动、停止和暂停权限 。 SQL Server 安装程序会自动分配此权限。 首先,安装远程服务器管理工具 (RSAT)。 请参阅 Windows 10 的远程服务器管理工具。
下表说明 SQL Server 安装程序为 SQL Server 组件使用的 Per-service SID 或本地 Windows 组请求的权限。
SQL Server 服务 | SQL Server 安装程序授予的权限 |
---|---|
SQL Server 数据库引擎: (向 Per-service SID 授予所有权限。默认实例: NT SERVICE\MSSQLSERVER 。命名实例:NT Service\MSSQL$<instance_name> 。) |
以服务身份登录 (SeServiceLogonRight) 替换进程级别标记 (SeAssignPrimaryTokenPrivilege) 跳过遍历检查 (SeChangeNotifyPrivilege) 调整进程的内存配额 (SeIncreaseQuotaPrivilege) 启动 SQL 编写器的权限 读取事件日志服务的权限 读取远程过程调用服务的权限 |
SQL Server 代理: 1 (向 Per-service SID 授予所有权限。默认实例: NT Service\SQLSERVERAGENT 。命名实例:NT Service\SQLAGENT$<instance_name> 。) |
以服务身份登录 (SeServiceLogonRight) 替换进程级别标记 (SeAssignPrimaryTokenPrivilege) 跳过遍历检查 (SeChangeNotifyPrivilege) 调整进程的内存配额 (SeIncreaseQuotaPrivilege) |
SSAS: (向本地 Windows 组授予所有权限。默认实例: SQLServerMSASUser$<computer_name>$MSSQLSERVER 。命名实例:SQLServerMSASUser$<computer_name>$<instance_name> 。Power Pivot for SharePoint 实例:SQLServerMSASUser$<computer_name>$PowerPivot 。) |
以服务身份登录 (SeServiceLogonRight) 仅适用于表格: 增加进程工作集 (SeIncreaseWorkingSetPrivilege) 调整进程的内存配额 (SeIncreaseQuotaPrivilege) “锁定内存页”(SeLockMemoryPrivilege) - 仅当完全关闭分页时才需要。 仅适用于故障转移群集安装: 提高计划优先级 (SeIncreaseBasePriorityPrivilege) |
SSRS: (向 Per-service SID 授予所有权限。默认实例: NT SERVICE\ReportServer 。命名实例:NT SERVICE\ReportServer$<instance_name> 。) |
以服务身份登录 (SeServiceLogonRight) |
SSIS: (向 Per-service SID 授予所有权限。默认实例和命名实例: NT SERVICE\MsDtsServer150 。Integration Services 没有单独的命名实例进程。) |
以服务身份登录 (SeServiceLogonRight) 应用程序事件日志的写入权限。 跳过遍历检查 (SeChangeNotifyPrivilege) 身份验证后模拟客户端 (SeImpersonatePrivilege) |
全文搜索: (向 Per-service SID 授予所有权限。默认实例: NT Service\MSSQLFDLauncher 。命名实例:NT Service\ MSSQLFDLauncher$<instance_name> 。) |
以服务身份登录 (SeServiceLogonRight) 调整进程的内存配额 (SeIncreaseQuotaPrivilege) 跳过遍历检查 (SeChangeNotifyPrivilege) |
SQL Server Browser: (向本地 Windows 组授予所有权限。默认实例或命名实例: SQLServer2005SQLBrowserUser$<computer_name> 。SQL Server Browser 没有单独的命名实例进程。) |
以服务身份登录 (SeServiceLogonRight) |
SQL Server VSS 编写器: (向 Per-service SID 授予所有权限。默认实例或命名实例: NT Service\SQLWriter 。SQL Server VSS Writer 没有单独的命名实例进程。) |
SQLWriter 服务在具有所需的所有权限的 LOCAL SYSTEM 帐户下运行。 SQL Server 安装程序不检查此服务,也不为其授予权限。 |
SQL Server Distributed Replay 控制器: | 以服务身份登录 (SeServiceLogonRight) |
SQL Server Distributed Replay 客户端: | 以服务身份登录 (SeServiceLogonRight) |
PolyBase 引擎和 DMS: | 以服务身份登录 (SeServiceLogonRight) |
启动板: | 以服务 身份登录 (SeServiceLogonRight) 替换进程级别标记 (SeAssignPrimaryTokenPrivilege) 跳过遍历检查 (SeChangeNotifyPrivilege) 调整进程的内存配额 (SeIncreaseQuotaPrivilege) |
R Services/机器学习服务:SQLRUserGroup (SQL Server 2016 (13.x) 和 SQL Server 2017 (14.x) | 默认情况下,没有“允许在本地登录”权限 |
机器学习服务:“所有应用程序包”的 [AppContainer] (SQL Server 2019 (15.x)) | SQL Server“Binn”、R_Services 和 PYTHON_Services 目录的读取和执行权限 |
1 SQL Server 代理服务在 SQL Server Express 的实例上处于禁用状态。
授予 SQL Server Per-service SID 或本地 Windows 组的文件系统权限
SQL Server 服务帐户必须有权访问资源。 为 Per-service SID 或本地 Windows 组设置了访问控制列表。
重要
对于故障转移群集安装,必须为本地帐户的 ACL 设置共享磁盘上的资源。
下表显示了 SQL Server 安装程序设置的 ACL:
服务帐户针对 | 文件和文件夹 | 访问 |
---|---|---|
MSSQLServer | Instid\MSSQL\backup | 完全控制 |
Instid\MSSQL\binn | 读取和执行 | |
Instid\MSSQL\data | 完全控制 | |
Instid\MSSQL\FTData | 完全控制 | |
Instid\MSSQL\Install | 读取和执行 | |
Instid\MSSQL\Log | 完全控制 | |
Instid\MSSQL\Repldata | 完全控制 | |
150\shared | 读取和执行 | |
Instid\MSSQL\Template Data(仅限SQL Server Express ) | 读取 | |
SQLServerAgent 1 | Instid\MSSQL\binn | 完全控制 |
Instid\MSSQL\Log | 读取、写入、删除和执行 | |
150\com | 读取和执行 | |
150\shared | 读取和执行 | |
150\shared\Errordumps | 读取和写入 | |
ServerName\EventLog | 完全控制 | |
FTS | Instid\MSSQL\FTData | 完全控制 |
Instid\MSSQL\FTRef | 读取和执行 | |
150\shared | 读取和执行 | |
150\shared\Errordumps | 读取和写入 | |
Instid\MSSQL\Install | 读取和执行 | |
Instid\MSSQL\jobs | 读取和写入 | |
MSSQLServerOLAPService | 150\shared\ASConfig | 完全控制 |
Instid\OLAP | 读取和执行 | |
Instid\Olap\Data | 完全控制 | |
Instid\Olap\Log | 读取和写入 | |
Instid\OLAP\Backup | 读取和写入 | |
Instid\OLAP\Temp | 读取和写入 | |
150\shared\Errordumps | 读取和写入 | |
ReportServer | Instid\Reporting Services\Log Files | 读取、写入、删除 |
Instid\Reporting Services\ReportServer | 读取和执行 | |
Instid\Reporting Services\ReportServer\global.asax | 完全控制 | |
Instid\Reporting Services\ReportServer\rsreportserver.config | 读取 | |
Instid\Reporting Services\RSTempfiles | 读取、写入、执行、删除 | |
Instid\Reporting Services\RSWebApp | 读取和执行 | |
150\shared | 读取和执行 | |
150\shared\Errordumps | 读取和写入 | |
MSDTSServer100 | 150\dts\binn\MsDtsSrvr.ini.xml | 读取 |
150\dts\binn | 读取和执行 | |
150\shared | 读取和执行 | |
150\shared\Errordumps | 读取和写入 | |
SQL Server Browser | 150\shared\ASConfig | 读取 |
150\shared | 读取和执行 | |
150\shared\Errordumps | 读取和写入 | |
SQLWriter | 不适用(以 Local System 身份运行) | |
用户 | Instid\MSSQL\binn | 读取和执行 |
Instid\Reporting Services\ReportServer | 读取、执行和列出文件夹内容 | |
Instid\Reporting Services\ReportServer\global.asax | 读取 | |
Instid\Reporting Services\RSWebApp | 读取、执行和列出文件夹内容 | |
150\dts | 读取和执行 | |
150\tools | 读取和执行 | |
100\tools | 读取和执行 | |
90\tools | 读取和执行 | |
80\tools | 读取和执行 | |
150\sdk | 读取 | |
Microsoft SQL Server\150\Setup Bootstrap | 读取和执行 | |
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 | 读取、执行和列出文件夹内容 | |
启动板 | %binn | 读取和执行 |
ExtensiblilityData | 完全控制 | |
Log\ExtensibilityLog | 完全控制 |
1 SQL Server 代理服务在 SQL Server Express 的实例和具有高级服务的 SQL Server Express 实例上处于禁用状态。
当数据库文件存储在用户定义的位置时,您必须授予每个服务 SID 访问该位置的权限。 有关将文件系统权限授予 Per-service SID 的详细信息,请参阅 配置数据库引擎访问的文件系统权限。
授予其他 Windows 用户帐户或组的文件系统权限
可能还必须向内置帐户或其他 SQL Server 服务帐户授予某些访问控制权限。 下表列出了 SQL Server 安装程序设置的其他 ACL。
请求组件 | 帐户 | 资源 | 权限 |
---|---|---|---|
MSSQLServer | 性能日志用户 | Instid\MSSQL\binn | 列出文件夹内容 |
性能监视器用户 | Instid\MSSQL\binn | 列出文件夹内容 | |
性能日志用户、性能监视器用户 | \WINNT\system32\sqlctr150.dll | 读取和执行 | |
仅限于管理员 | \\.\root\Microsoft\SqlServer\ServerEvents\<sql_instance_name> 1 |
完全控制 | |
管理员和系统 | \tools\binn\schemas\sqlserver\2004\07\showplan | 完全控制 | |
用户 | \tools\binn\schemas\sqlserver\2004\07\showplan | 读取和执行 | |
Reporting Services | 报表服务器 Windows 服务帐户 | <install>\Reporting Services\LogFiles | DELETE READ_CONTROL SYNCHRONIZE FILE_GENERIC_READ FILE_GENERIC_WRITE FILE_READ_DATA FILE_WRITE_DATA FILE_APPEND_DATA FILE_READ_EA FILE_WRITE_EA FILE_READ_ATTRIBUTES FILE_WRITE_ATTRIBUTES |
报表服务器 Windows 服务帐户 | <install>\Reporting Services\ReportServer | 读取 | |
报表服务器 Windows 服务帐户 | <install>\Reporting Services\ReportServer\global.asax | 完全 | |
报表服务器 Windows 服务帐户 | <install>\Reporting Services\RSWebApp | 读取和执行 | |
所有人 | <install>\Reporting Services\ReportServer\global.asax | READ_CONTROL FILE_READ_DATA FILE_READ_EA FILE_READ_ATTRIBUTES |
|
ReportServer Windows 服务帐户 | <install>\Reporting Services\ReportServer\rsreportserver.config | DELETE READ_CONTROL SYNCHRONIZE FILE_GENERIC_READ FILE_GENERIC_WRITE FILE_READ_DATA FILE_WRITE_DATA FILE_APPEND_DATA FILE_READ_EA FILE_WRITE_EA FILE_READ_ATTRIBUTES FILE_WRITE_ATTRIBUTES |
|
所有人 | 报表服务器密钥(Instid 配置单元) | 查询值 枚举子项 通知 读取控制 |
|
终端服务用户 | 报表服务器密钥(Instid 配置单元) | 查询值 设置值 创建子项 枚举子项 通知 删除 读取控制 |
|
超级用户 | 报表服务器密钥(Instid 配置单元) | 查询值 设置值 创建子项 枚举子项 通知 删除 读取控制 |
1 这是 WMI 提供程序命名空间。
与非寻常磁盘位置相关的文件系统权限
默认的作为安装位置的驱动器为 systemdrive,通常是驱动器 C。本部分介绍当将 tempdb 或用户数据库安装到非常用位置时要考虑的注意事项。
非默认的驱动器
当安装到不是默认驱动器的本地驱动器时,Per-service SID 必须对文件位置具有访问权限。 SQL Server 安装程序会预配所需的访问权限。
网络共享
当数据库安装到网络共享时,服务帐户必须对用户数据库和 tempdb
数据库的文件位置具有访问权限。 SQL Server 安装程序无法预配对网络共享的访问权限。 用户必须为服务帐户设置对 tempdb 位置的访问权限,然后才能运行安装程序。 用户必须设置对用户数据库位置的访问权限,然后才能创建数据库。
注意
虚拟帐户无法通过身份验证,因而无法访问远程位置。 所有虚拟帐户均使用计算机帐户的权限。 以 <domain_name>\<computer_name>$
格式设置计算机帐户。
查看其他注意事项
下表显示了 SQL Server 服务提供其他功能时所需的权限。
服务/应用程序 | 功能 | 必需的权限 |
---|---|---|
SQL Server (MSSQLSERVER) | 使用 xp_sendmail 写入邮件槽。 | 网络写入权限。 |
SQL Server (MSSQLSERVER) | 运行用户的而不是 SQL Server 管理员的 xp_cmdshell。 | 充当操作系统的一部分以及替换进程级别标记。 |
SQL Server 代理 (MSSQLSERVER) | 使用自动重启功能。 | 必须是本地 Administrators 组的成员。 |
数据库引擎 优化顾问 | 优化数据库以获得最佳查询性能。 | 第一次使用时,拥有系统管理员权限的用户必须初始化该应用程序。 初始化后,dbo 用户可使用 数据库引擎 优化顾问仅优化他们拥有的那些表。 有关详细信息,请参阅启动并使用数据库引擎优化顾问。 |
重要
升级 SQL Server 之前,请先启用 SQL Server 代理,并验证所需的默认配置,即验证 SQL Server 代理服务帐户是否为 SQL Server 固定服务器角色 sysadmin 的成员。
注册表权限
将在 HKLM\Software\Microsoft\Microsoft SQL Server\<Instance_ID>
下为识别实例的组件创建注册表配置单元。 例如:
HKLM\Software\Microsoft\Microsoft SQL Server\MSSQL15.MyInstance
HKLM\Software\Microsoft\Microsoft SQL Server\MSASSQL15.MyInstance
HKLM\Software\Microsoft\Microsoft SQL Server\MSSQL.150
注册表还维护实例 ID 到实例名的映射。 实例 ID 到实例名的映射按如下方式维护:
[HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\Instance Names\SQL] "InstanceName"="MSSQL15"
[HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\Instance Names\OLAP] "InstanceName"="MSASSQL15"
[HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\Instance Names\RS] "InstanceName"="MSRSSQL15"
WMI
Windows Management Instrumentation (WMI) 必须能够连接到 数据库引擎。 为了支持这一点,需在NT SERVICE\winmgmt
NT SERVICE\winmgmt 数据库引擎) 的 per-service SID。
SQL WMI 提供程序需要以下最低权限:
msdb
数据库的 db_ddladmin 或 db_owner 固定数据库角色中的成员资格。服务器中的CREATE DDL EVENT NOTIFICATION 权限。
中的 CREATE TRACE EVENT NOTIFICATION 数据库引擎权限。
VIEW ANY DATABASE 服务器级别权限。
SQL Server 安装程序会创建一个 SQL WMI 命名空间,并向 SQL Server 代理服务 SID 授予读取权限。
Named pipes
在所有安装中,SQL Server 安装程序都通过共享内存协议(一种本地命名管道)提供针对 SQL Server 数据库引擎 的访问权限。
设置
此部分介绍如何在各种 SQL Server 组件内设置帐户。
数据库引擎预配
以下帐户将作为登录名添加到 SQL Server 数据库引擎中。
Windows 主体
在安装过程中,SQL Server 安装程序要求至少将一个用户帐户命名为固定服务器角色 sysadmin 的成员。
SA 帐户
sa 帐户始终作为 数据库引擎 登录名存在,它是 sysadmin 固定服务器角色的成员。 当仅使用 Windows 身份验证安装 数据库引擎 时(即当未启用 SQL Server 身份验证时),sa 登录名仍存在但处于禁用状态,并且密码复杂且是随机的。 有关启用 sa 帐户的信息,请参阅 更改服务器身份验证模式。
SQL Server Per-service SID 登录名和特权
将 SQL Server 服务的 Per-service SID(有时也称为服务安全主体 (SID))预配为 数据库引擎 登录名。 Per-service SID 登录名是 sysadmin 固定服务器角色的成员。 有关每个服务 SID 的信息,请参阅使用服务 SID 授予对 SQL Server 中服务的访问权限。
SQL Server 代理登录名和特权
SQL Server 代理服务的 Per-service SID 预配为一个 数据库引擎 登录名。 Per-service SID 登录名是 sysadmin 固定服务器角色的成员。
Always On 可用性组和 SQL 故障转移群集实例和特权
当将数据库引擎安装为 Always On 可用性组或 SQL 故障转移群集实例 (SQL FCI) 时,将在数据库引擎中设置 LOCAL SYSTEM。 LOCAL SYSTEM 登录名被授予 ALTER ANY AVAILABILITY GROUP 权限(对于 Always On 可用性组)以及 VIEW SERVER STATE 权限(对于 SQL FCI)。
SQL 编写器和特权
SQL Server VSS 编写器服务的 Per-service SID 预配为一个 数据库引擎 登录名。 Per-service SID 登录名是 sysadmin 固定服务器角色的成员。
SQL WMI 和特权
SQL Server 安装程序将 NT SERVICE\Winmgmt
帐户设置为数据库引擎登录名,并将其添加到固定服务器角色 sysadmin 中。
SSRS 预配
在安装过程中指定的帐户将设置为 RSExecRole 数据库角色的成员。 有关详细信息,请参阅配置报表服务器服务帐户(SSRS 配置管理器)。
SSAS 预配
SSAS 服务帐户要求各不相同,具体取决于服务器的部署方式。 如果正在安装 Power Pivot for SharePoint,SQL Server 安装程序会要求你将 Analysis Services 服务配置为在域帐户下运行。 为了支持 SharePoint 中内置的托管帐户功能,需要域帐户。 为此,SQL Server 安装程序没有为 Power Pivot for SharePoint 安装提供默认服务帐户,例如虚拟帐户。 有关设置 Power Pivot for SharePoint 的详细信息,请参阅 配置 Power Pivot 服务帐户。
对于所有其他独立 SSAS 安装,您可以将服务设置为在域帐户、内置系统帐户、托管帐户或虚拟帐户下运行。 有关帐户设置的详细信息,请参阅配置服务帐户 (Analysis Services)。
对于群集安装,您必须指定一个域帐户或一个内置系统帐户。 SSAS 故障转移群集既不支持托管帐户,也不支持虚拟帐户。
所有 SSAS 安装均要求您指定 Analysis Services 实例的系统管理员。 管理员特权在 Analysis Services 的 “服务器” 角色中设置。
SSRS 预配
在安装过程中指定的帐户将在 数据库引擎 中设置为 RSExecRole 数据库角色的成员。 有关详细信息,请参阅配置报表服务器服务帐户(SSRS 配置管理器)。
从以前的版本升级
此部分介绍在从先前版本的 SQL Server 升级的过程中进行的更改。
SQL Server 2019 (15.x) 需要受支持的操作系统。 任何在更低操作系统版本上运行的 SQL Server 先前版本在升级 SQL Server 之前,都必须升级操作系统。
在将 SQL Server 2005 (9.x) 升级到 SQL Server 2019 (15.x) 的过程中,安装程序会按以下方式配置 SQL Server 实例:
- 数据库引擎 使用 Per-service SID 的安全上下文运行。 将向 Per-service SID 授予针对 SQL Server 实例的文件夹(如 DATA)和 SQL Server 注册表项的访问权限。
- 数据库引擎 的 Per-service SID 在 数据库引擎 中设置为 sysadmin 固定服务器角色的成员。
- Per-service SID 将添加到本地 SQL Server Windows 组中,除非 SQL Server 是故障转移群集实例。
- SQL Server 资源保持设置为本地 SQL Server Windows 组。
- 服务的本地 Windows 组从
SQLServer2005MSSQLUser$<computer_name>$<instance_name>
重命名为SQLServerMSSQLUser$<computer_name>$<instance_name>
。 已迁移的数据库的文件位置具有本地 Windows 组的访问控制项 (ACE)。 新数据库的文件位置具有 Per-service SID 的 ACE。
从 SQL Server 2008 (10.0.x) 进行升级的过程中,SQL Server 安装程序会保留 SQL Server 2008 (10.0.x) Per-service SID 的 ACE。
对于 SQL Server 故障转移群集实例,会保留为服务配置的域帐户的 ACE。
附录
本部分包含有关 SQL Server 的其他信息。
服务帐户的描述
服务帐户是用来启动 Windows 服务的帐户,如 SQL Server 数据库引擎。 对于正在运行的 SQL Server,除了服务SID(始终存在并且是固定服务器角色 sysamin 的成员)之外,无需将服务帐户作为登录名添加到 SQL Server。
可用于任何操作系统的帐户
除了前面介绍的新的 MSA、gMSA 和虚拟帐户之外,还可以使用以下帐户。
如果服务必须与网络服务进行交互,则访问类似于文件共享的域资源;如果服务使用到运行 SQL Server 的其他计算机的链接服务器连接,可使用具有最低特权的域帐户。 许多服务器到服务器的活动只能使用域用户帐户来执行。 此帐户应由域管理员在您的环境内预先创建。
如果将 SQL Server 配置为使用域帐户,则可以隔离服务的特权,但必须手动管理密码或创建自定义解决方案来管理这些密码。 许多服务器应用程序使用此策略以增强安全性,但此策略要求额外的管理和复杂性。 在这些部署中,服务管理员会在维护任务(比如管理服务密码和服务主体名称 (SPN))上耗费大量时间,这对于 Kerberos 身份验证是必需的。 此外,这些维护任务可能会中断服务。
如果计算机不在域中,建议使用不具有 Windows 管理员权限的本地用户帐户。
Local Service 帐户是一个内置帐户,与 Users 组的成员具有相同级别的资源和对象访问权限。 如果有个别服务或进程的安全性受到威胁,则此有限访问权限有助于保护系统的安全性。 以本地服务帐户身份运行的服务将以一个没有凭据的 Null 会话形式访问网络资源。
SQL Server 或 SQL Server 代理服务不支持本地服务帐户。 不支持将“本地服务”作为运行这些服务的帐户,因为该服务是一种共享服务,并且任何在本地服务下运行的其他服务都对 SQL Server 具有系统管理员访问权限。
该帐户的实际名称为 NT AUTHORITY\LOCAL SERVICE
。
Network Service 帐户是一个内置帐户,比 Users 组的成员拥有更多的对资源和对象的访问权限。 以网络服务帐户身份运行的服务通过使用计算机帐户的凭据(格式为 <domain_name>\<computer_name>$
)访问网络资源。 该帐户的实际名称为 NT AUTHORITY\NETWORK SERVICE
。
Local System 是一个具有高特权的内置帐户。 它对本地系统拥有许多特权并作为网络上的计算机。 该帐户的实际名称为 NT AUTHORITY\SYSTEM。
辨别识别实例的服务和不识别实例的服务
识别实例的服务与特定 SQL Server 实例相关联,并具有自己的注册表配置单元。 通过为每个组件或服务运行 SQL Server 安装程序,可安装识别实例的服务的多个副本。 不识别实例的服务由所有已安装的 SQL Server 实例共享。 它们不与特定实例相关联,仅安装一次且不能并行安装。
SQL Server 中识别实例的服务包括:
SQL Server
SQL Server 代理
请注意,SQL Server Express 的实例和具有高级服务的 SQL Server Express 实例上已禁用 SQL Server 代理服务。
-
Analysis Services
SharePoint 集成模式下的 Analysis Services 作为单个命名实例以“Power Pivot”身份运行。 实例名称是固定不变的。 不能指定其他名称。 你只能在每个物理服务器上安装一个作为“Power Pivot”运行的 Analysis Services 实例。
-
Reporting Services
全文搜索
SQL Server 中不识别实例的服务包括:
- Integration Services
- SQL Server Browser
- SQL 编写器
本地化的服务名称
下表列出了 Windows 的本地化版本所显示的服务名称。
语言 | Local Service 的名称 | Network Service 的名称 | Local System 的名称 | Admin Group 的名称 |
---|---|---|---|---|
英语 简体中文 繁体中文 韩语 日语 |
NT AUTHORITY\LOCAL SERVICE |
NT AUTHORITY\NETWORK SERVICE |
NT AUTHORITY\SYSTEM |
BUILTIN\Administrators |
德语 | NT-AUTORITÄT\LOKALER DIENST |
NT-AUTORITÄT\NETZWERKDIENST |
NT-AUTORITÄT\SYSTEM |
VORDEFINIERT\Administratoren |
法语 | AUTORITE NT\SERVICE LOCAL |
AUTORITE NT\SERVICE RÉSEAU |
AUTORITE NT\SYSTEM |
BUILTIN\Administrators |
意大利语 | NT AUTHORITY\SERVIZIO LOCALE |
NT AUTHORITY\SERVIZIO DI RETE |
NT AUTHORITY\SYSTEM |
BUILTIN\Administrators |
西班牙语 | NT AUTHORITY\SERVICIO LOC |
NT AUTHORITY\SERVICIO DE RED |
NT AUTHORITY\SYSTEM |
BUILTIN\Administradores |
俄语 | NT AUTHORITY\LOCAL SERVICE |
NT AUTHORITY\NETWORK SERVICE |
NT AUTHORITY\СИСТЕМА |
BUILTIN\Администраторы |