为SQL Server Always On可用性组配置托管服务帐户

本文是该系列SQL Server始终在可用性组6 的文章。 它涵盖了SQL Services的组管理服务帐户(gMSA)的配置。

介绍

DBA使用服务帐户来运行各种SQL服务。 通常,对于单独的服务器SQL Services,我们应该使用单独的服务帐户。

  • 您应该运行权限最少SQL服务
  • 您应该使用复杂的密码并将其存储在安全的地方
  • 它的密码永远不会过期
  • 您还应该根据组织的安全策略定期更改密码。

如果维护大量SQL Server,则可能会认为更改和维护这些服务器的密码是一项繁琐的任务。 使用SQL Server配置管理器更改服务帐户密码后,还需要重新启动SQL Services。 对于具有高事务性的应用程序来说,要使其停机也可能是一项艰巨的任务。

在这些情况下,我们可以利用组托管服务帐户(gMSA)。 让我们在随后的部分中进行探讨。

先决条件

  1. 您应该按照文章系列( 带有SQL Server Always On可用性组在Windows Server 2016上安装SQL Server 2019)并配置以下内容

    • 虚拟机充当域控制器和活动目录
    • 安装了SQL Server 2019的三个SQL节点
    • 您应该在同步模式下为这三个节点配置SQL Server Always On可用性组

  2. 安装了活动目录模块的Windows PowerShell。 我们将其安装为活动目录配置的一部分

托管服务帐户概述

在活动目录配置中,我们有两种托管服务帐户。

  • 独立托管服务帐户(SMSA)提供自动密码管理功能。 简而言之,用户不管理这些用户的凭据。 它会根据活动目录策略自动更改密码并与服务同步。 我们可以对一个服务器使用独立的托管服务帐户
  • 组托管服务帐户(gMSA)扩展了SMSA的功能。 您可以将gMSA用于多台服务器。 我们定义一个AD组,并为所有可以使用指定gMSA凭据的所需服务器提供权限

总而言之,使用gMSA作为SQL Services的服务帐户可获得以下好处。

  • 自动密码管理
  • 管理员不需要将密码存储在密码库中
  • 它使用非常复杂的密码(120个字符),并且管理员也不知道。 它也避免了在不知不觉中传播密码的风险
  • SPN自动注册
  • 您可以在多个服务器和服务中使用它们
  • 您可以在独立服务器或在故障转移群集服务之上运行的服务(例如Windows服务,应用程序池,计划任务)上使用gMSA

让我们开始为SQL Server Always On可用性组配置组托管服务帐户(GMSA)。

为SQL服务配置gMSA

我们可以为Windows Server 2012或更高版本配置和使用gMSA服务帐户。 在本文中,我们将使用Windows Server 2016。

步骤1:为gMSA创建安全组

获取活动目录服务器的RDP并使用DSA.MSC命令启动活动目录(AD)。

为SQL Server Always On可用性组配置托管服务帐户

右键单击域名,然后选择“新建”->“组”。 根据您的要求或命名约定指定组名。

为SQL Server Always On可用性组配置托管服务帐户

单击“确定”,它将创建AD组。 打开该组并输入描述。 它可以帮助您有效地识别安全组及其用途。

为SQL Server Always On可用性组配置托管服务帐户

单击成员。 在成员中,添加故障转移群集节点。 我在SQL Server Always On可用性组中配置了SQLNode1,SQLNode2和SQLNode3虚拟机。

为SQL Server Always On可用性组配置托管服务帐户

步骤2:配置**分发服务(KDS)

组托管服务帐户需要使用AD PowerShell模块进行**分发服务(KDS)。 它使用Add-KdsRootkey PowerShell cmdlet。 所有AD域控制器之间的完全同步需要10个小时。

出于演示目的,您可以使用-EffectiveImmediately参数,也可以指定过去的时间戳。

在活动目录VM(在本例中为vditest3.mydemosql.com)上打开Windows PowerShell,然后运行以下命令。

它返回一个GUID,如下所示。

为SQL Server Always On可用性组配置托管服务帐户

您还可以使用Get-KdsRootKey验证**,以验证KDS**是否存在于活动目录中。

您将获得值,生效日期,域控制器和GUID。

为SQL Server Always On可用性组配置托管服务帐户

步骤3:建立新的群组管理服务帐户

在此步骤中,我们使用New-ADServiceAccount PowerShell cmdlet创建一个新的gMSA帐户。

它使用以下参数。

  • 名称:指定gMSA服务帐户名称
  • DNSHostName:输入服务帐户的FQDN。 就我而言,FQDN是gMSAsqlservice.mydemosql.com
  • PrincipalsAllowedToRetrieveManagedPassword:指定我们在步骤1:为gMSA创建安全组中创建的AD组名称

为SQL Server Always On可用性组配置托管服务帐户

您还必须允许gMSA帐户在SQL Server中注册其服务主体名称(SPN)以进行Kerberos身份验证。

它为您提供以下输出。

为SQL Server Always On可用性组配置托管服务帐户

您可以检查帐户属性,例如加密类型和SAM帐户名。 默认情况下,它使用RC4,AES128和AES256加密。 您可以注意到该帐户名在帐户名中使用$后缀。

为SQL Server Always On可用性组配置托管服务帐户

步骤4:为目标服务器启用AD Windows功能

我们需要在目标服务器中执行这些步骤。 将RDP带到目标服务器, 然后在Windows功能中启用AD DS和AD LDS工具

为SQL Server Always On可用性组配置托管服务帐户

单击下一步,然后确认功能部件安装。 在描述框中,您可以注意到它还在目标服务器上安装了Windows PowerShell的Active Directory模块。

为SQL Server Always On可用性组配置托管服务帐户

单击“ 安装”以启用AD功能及其对目标节点的依赖性。

为SQL Server Always On可用性组配置托管服务帐户

您也可以在Windows故障转移群集中的其余服务器上执行此步骤。

步骤5:在目标节点上为SQL Server Always On可用性组安装组托管服务帐户

一旦目标节点上的AD PowerShell cmdlet可用,我们需要安装gMSA服务帐户。 它使用Install-ADServiceAccount cmdlet。

为SQL Server Always On可用性组配置托管服务帐户

它不返回任何输出。 您可以使用另一个cmdlet Test-ADServiceAccount来验证组托管服务帐户的状态。 如果gMSA有效且可以使用,则返回true。

为SQL Server Always On可用性组配置托管服务帐户

您可以使用Get-ADServiceAccount cmdlet检查上次重置托管服务帐户的密码。

为SQL Server Always On可用性组配置托管服务帐户

步骤6:将gMSA配置为运行SQL Services

现在,我们准备在SQL Services中使用gMSA帐户。 打开SQL Server配置管理器,然后转到服务。

现在,在活动目录服务帐户对象中搜索gMSA帐户。 您也可以将帐户名指定为[mydemosql \ gmsasqlservice $]。 它不会给您密码提示。

您可能会注意到我们没有该用户的密码。 也不需要配置在组托管服务帐户下运行的服务。

为SQL Server Always On可用性组配置托管服务帐户

单击确定,然后重新启动SQL Services。 您可以看到SQL Service在[mydemosql \ gmsasqlservice $]安全上下文下运行。

为SQL Server Always On可用性组配置托管服务帐户
使用SSMS连接到SQL Server并查看错误日志。
  • 验证服务帐户在SQL Server日志中的条目

    为SQL Server Always On可用性组配置托管服务帐户

  • 验证SQL Server的服务主体名称(SPN)注册

它成功注册了Kerberos身份验证的服务主体名称(SPN),并在错误日志中记录了一个条目,如下所示。

  • [MSSQLSvc / SQLNode1.MyDemoSQL.Com:INST1]
  • [MSSQLSvc / SQLNode1.MyDemoSQL.Com:I433]

为SQL Server Always On可用性组配置托管服务帐户

同样,更改SQL Server Always On可用性组SQLNode2和SQLNode3中的服务帐户,然后启动SQL服务。

为SQL Server Always On可用性组配置托管服务帐户
  • 将这些帐户添加到所有SQL实例中,并为[MyDemoSQL \ gMSsqlservices $]帐户提供数据库镜像终结点。 如果该帐户没有端点的权限,则在“ SQL Server始终可用”组中将看不到数据库,并且您将获得断开连接状态。

您可以保留一段时间,然后会看到一个健康的AG仪表板。 在下面的屏幕快照中,我们看到[SQLShackDemo]数据库处于同步状态,而没有任何数据丢失。

为SQL Server Always On可用性组配置托管服务帐户

结论

在本文中,我们探讨了SQL Server Always On可用性组的组托管服务帐户(gMSA)。 它会自动管理SQL Service帐户并更改它们,而无需重新启动SQL Services。 它还消除了密码被黑客入侵或滥用以连接到SQL的风险。 您也可以使用此gMSA帐户配置Windows任务计划程序。

目录

Windows Server 2016上SQL Server Always On可用性组的全面指南
为SQL Server Always On可用性组配置域控制器和Active Directory
为SQL Server Always On可用性组配置故障转移群集,存储控制器和仲裁配置
在Windows Server 2016和SQL Server Always On可用性组上安装SQL Server 2019
将新节点添加到现有SQL Server Always On可用性组中
为SQL Server Always On可用性组配置托管服务帐户
为SQL Server Always On可用性组配置托管服务帐户

翻译自: https://www.sqlshack.com/configure-managed-service-accounts-for-sql-server-always-on-availability-groups/