如何在新建域中配置组托管服务账户(gMSA)并解决SQL相关问题?
一、将组托管服务账户(gMSA)添加至新建域、加入安全组并分配给计算机组的步骤
- 前置准备:确保域控制器已安装AD PowerShell模块,操作账户拥有域管理员权限。
- 创建gMSA账户
- 以域管理员身份打开PowerShell,执行命令:
示例:New-ADServiceAccount -Name <gMSA账户名> -DNSHostName <gMSA的DNS主机名> -ManagedPasswordIntervalInDays 30 -Enabled $trueNew-ADServiceAccount -Name SQLgMSA -DNSHostName SQLgMSA.contoso.com -ManagedPasswordIntervalInDays 30 -Enabled $true
- 以域管理员身份打开PowerShell,执行命令:
- 创建/选择目标安全组
- 若需新建安全组,执行:
示例:New-ADGroup -Name <安全组名> -GroupCategory Security -GroupScope Global -SamAccountName <安全组SAM账户名>New-ADGroup -Name SQLServersGroup -GroupCategory Security -GroupScope Global -SamAccountName SQLServersGroup
- 若需新建安全组,执行:
- 将gMSA加入安全组
- 执行命令(注意gMSA账户名后需加
$):
示例:Add-ADGroupMember -Identity <安全组名> -Members <gMSA账户名>$Add-ADGroupMember -Identity SQLServersGroup -Members SQLgMSA$
- 执行命令(注意gMSA账户名后需加
- 授权计算机组获取gMSA密码
- 获取目标计算机组对象,更新gMSA的授权属性:
示例:$computerGroup = Get-ADGroup -Identity <计算机组名> Set-ADServiceAccount -Identity <gMSA账户名> -PrincipalsAllowedToRetrieveManagedPassword $computerGroup$computerGroup = Get-ADGroup -Identity SQLServerComputers; Set-ADServiceAccount -Identity SQLgMSA -PrincipalsAllowedToRetrieveManagedPassword $computerGroup
- 获取目标计算机组对象,更新gMSA的授权属性:
- 在目标计算机上安装gMSA
- 登录目标计算机,以本地管理员身份运行PowerShell:
Install-ADServiceAccount -Identity <gMSA账户名> - 验证安装:
Test-ADServiceAccount <gMSA账户名>,返回True即为成功。
- 登录目标计算机,以本地管理员身份运行PowerShell:
二、SQL Server使用gMSA运行服务的完整步骤
1. 为gMSA配置Kerberos功能
- 为gMSA注册SQL Server的服务主体名称(SPN),确保Kerberos身份验证正常:
示例(默认端口1433):setspn -A MSSQLSvc/<SQL服务器FQDN>:<端口> <gMSA账户名>$ setspn -A MSSQLSvc/<SQL服务器NetBIOS名>:<端口> <gMSA账户名>$setspn -A MSSQLSvc/SQL01.contoso.com:1433 SQLgMSA$ setspn -A MSSQLSvc/SQL01:1433 SQLgMSA$ - 验证SPN:
setspn -L <gMSA账户名>$,确认已注册的MSSQLSvc条目存在。
2. 创建域安全组并添加SQL服务器
- 新建安全组(若未创建):
New-ADGroup -Name SQLServiceHosts -GroupCategory Security -GroupScope DomainLocal -SamAccountName SQLServiceHosts - 将运行SQL Server的计算机加入该组:
示例:Add-ADGroupMember -Identity SQLServiceHosts -Members <计算机名>$Add-ADGroupMember -Identity SQLServiceHosts -Members SQL01$
3. 授权安全组获取gMSA密码
- 更新gMSA的授权属性,允许组内计算机获取密码:
$securityGroup = Get-ADGroup -Identity SQLServiceHosts Set-ADServiceAccount -Identity SQLgMSA -PrincipalsAllowedToRetrieveManagedPassword $securityGroup
4. 在SQL服务器上安装gMSA
- 登录SQL服务器,以本地管理员身份运行PowerShell:
Install-ADServiceAccount -Identity SQLgMSA - 验证:
Test-ADServiceAccount SQLgMSA,返回True即为成功。
5. 配置SQL Server服务使用gMSA
- 打开SQL Server配置管理器,找到SQL Server服务下的数据库引擎服务。
- 右键点击服务选择属性,切换到登录选项卡。
- 在账户名中输入
域\<gMSA账户名>(无需加$),密码留空,点击应用。 - 重启SQL Server数据库引擎服务。
6. 解决分配gMSA时的初始WMI错误
- 常见原因:SQL Server配置管理器的WMI权限不足,或gMSA未正确安装。
- 解决步骤:
- 检查WMI命名空间权限:
- 打开
wmimgmt.msc,右键点击WMI控制(本地)选择属性。 - 切换到安全选项卡,展开
Root\Microsoft\SqlServer\ComputerManagement<版本号>(如SQL Server 2019对应15),点击安全。 - 添加当前操作账户,授予读取和执行方法权限。
- 打开
- 重新注册WMI组件:
版本号对应:2019=150,2017=140,2016=130,以此类推。mofcomp "C:\Program Files\Microsoft SQL Server\<版本号>\Shared\sqlmgmproviderxpsp2up.mof" - 重启WMI服务:
net stop winmgmt net start winmgmt - 再次尝试配置gMSA,若仍报错,重新验证gMSA安装状态和计算机的安全组成员身份。
- 检查WMI命名空间权限:
内容的提问来源于stack exchange,提问作者Jamie
相关产品推荐
相关产品推荐

