本文属于SQL Server安全专题系列
服务帐号本质是一个操作系统帐号,每个SQL Server服务都需要配置一个服务帐号,并使用这个帐号来运行服务。本篇将介绍关于服务帐号的一些安全方面的内容。
类型:
截至到SQL 2016,SQL Server支持下面类型的帐号作为服务帐号:
- Local User:创建在本机的Windows帐号。
- Domain User:域用户。
- Built-in accounts:包括NETWORK SERVICE、LOCAL SERVICE和LOCAL SYSTEM这三类在Windows中总是可用的帐号
- Managed Service Accounts(MSAs):
- Virtual Accounts:从Windows 2008R2和Win7开始引入,在本地服务器创建,但是可以使用计算机帐号的证书访问域资源。
Virtual Accounts:
过去,管理员通常在本地服务帐号(LOCAL SERVICE)的上下文中运行服务 (如 SQL Server、Exchange 或 IIS) 的环境中的服务之间的隔离。虚拟帐号的出现就是为了进行一种“隔离”,以便减少特权帐号的过度使用,基于这种隔离,虚拟帐号还可以用于“托管(Managed)”。意味着管理员不需要注册SPN(服务主体名)和不需要管理密码。而由Windows环境自动管理。
默认情况下,虚拟帐号是本地的,不能用于多服务器,意味着这类帐号不适合用于AlwaysOn或者Cluster。如果在Win 7或者Windows 2008 R2及以上版本中独立安装SQL Server,那么下面的服务默认使用虚拟帐号:
- 数据库引擎
- SQL Agent
- SSAS
- SSIS
- SSRS
- SQL Server Distributed Relay Controller
- SQL Server Distributed Relay Client
- Full-Text Daemon Launcher Service(FD Launcher)
在集群环境下的SQL 实例,SSIS、SSRS和FD Launcher还是使用虚拟账号,因为这些对集群不敏感并且常规是安装在每个单独节点中。
Managed Service Accounts:
简称MSAs,也叫托管帐号。类似虚拟帐号,不需要手动配置SPN或者管理密码。两者的区别在于MSAs是域级别的帐号而虚拟帐号是本地帐号。由于MSAs是基于域的,所以可以用于必须进行网络层资源。但是即使这样,MSA依旧仅指定给网络中的单台机器。意味着MSAs依旧不能用于集群。
为了减缓这种限制,从Windows 2012 R2开始引入了gMSAs(组托管帐号),跟MSAs一样,但是可以运行在多台服务器,用于解决集群限制。
如果计划使用MSA或者gMSA,那么帐号必须在安装SQL Server之前先在域控制器中创建好。
如果计划使用MSA或者gMSA,那么帐号必须在安装SQL Server之前先在域控制器中创建好。
下面脚本可以用于查询SQL Server服务帐号
--查询SQL Server服务帐号(SQL 2008 R2 SP1)
SELECT DSS.servicename,
DSS.startup_type_desc,
DSS.status_desc,
DSS.last_startup_time,
DSS.service_account,
DSS.is_clustered,
DSS.cluster_nodename,
DSS.filename,
DSS.startup_type,
DSS.status,
DSS.process_id
FROM sys.dm_server_services AS DSS;
当需要 SQL Server 计算机外部的资源时, Microsoft 建议使用配置了必需的最小特权的托管服务帐户 (MSA)。
对于SQL Server配置管理器中的帐号选择,可能名字会不一样,这里列出了对应的名字:
Local Service:NT AUTHORITY\LOCAL SERVICE,注意这是共享服务的帐号,SQL 引擎及SQL 代理不支持它作为启动帐号。
Network Service:NT AUTHORITY\NETWORK SERVICE
Local System:NT AUTHORITY\SYSTEM
Admin Group:BUILTIN\Administrators