Skip to content

Managed Service Accounts

Service accounts voor SQL Server services heb je in drie smaken. Gewone domeinaccounts werken, maar ze vragen handmatig wachtwoordbeheer en je hebt altijd het risico dat iemand ermee inlogt als gebruiker.


Overzicht

Type Wachtwoordbeheer Meerdere servers Vereist
Gewoon domeinaccount Handmatig Ja Altijd beschikbaar
sMSA (Managed Service Account) Automatisch (AD) Nee — 1 computer Server 2008 R2+
gMSA (Group Managed Service Account) Automatisch (AD) Ja Server 2012+ DC + KDS

Voor SQL Server in een labomgeving of productie: gMSA is de voorkeur. Geen wachtwoord om bij te houden, geen risico op verloop, automatische SPN-registratie.


sMSA — Managed Service Account

Automatisch wachtwoordbeheer door Active Directory, maar gebonden aan één computer.

# Aanmaken op de Domain Controller
New-ADServiceAccount -Name "svc-sqlengine" `
                     -DNSHostName "sql01.lab.local" `
                     -Enabled $true

# Installeren op de doelserver (uitvoeren op sql01)
Install-ADServiceAccount -Identity "svc-sqlengine"

# Controleren
Test-ADServiceAccount -Identity "svc-sqlengine"

In SQL Server Configuration Manager: selecteer de service → Properties → Log On → kies NT SERVICE\... of het sMSA account (naam eindigt op $, geen wachtwoord invullen).


gMSA — Group Managed Service Account

Zelfde voordelen als sMSA maar bruikbaar op meerdere servers — ideaal voor clusters, AlwaysOn AG, replicatie.

Vereisten

  • Domain Functional Level: Windows Server 2012 of hoger
  • KDS Root Key aangemaakt op de DC

Stap 1 — KDS Root Key aanmaken (eenmalig per domein)

# In productie: vertraging van 10 uur (replicatiebuffer)
Add-KdsRootKey -EffectiveImmediately

# In een lab: onmiddellijk actief (niet voor productie)
Add-KdsRootKey -EffectiveTime (Get-Date).AddHours(-10)

Stap 2 — gMSA aanmaken

New-ADServiceAccount -Name "svc-sqlengine" `
                     -DNSHostName "sql01.lab.local" `
                     -PrincipalsAllowedToRetrieveManagedPassword "sql01$", "sql02$" `
                     -Enabled $true

PrincipalsAllowedToRetrieveManagedPassword — lijst van computeraccounts (met $) die het wachtwoord mogen ophalen.

Stap 3 — Installeren op de doelserver

# Uitvoeren op sql01 (en op elke server in de lijst)
Install-ADServiceAccount -Identity "svc-sqlengine"
Test-ADServiceAccount    -Identity "svc-sqlengine"

Stap 4 — SQL Server services configureren

Via SQL Server Configuration Manager:

  1. Rechtermuisklik op de service → Properties → tabblad Log On
  2. Account: lab\svc-sqlengine$ (met $ op het einde)
  3. Wachtwoord: leeg laten
  4. Service herstarten

Welke services een eigen account geven?

  • SQL Server (MSSQLSERVER) — eigen gMSA
  • SQL Server Agent — eigen gMSA (of zelfde als engine, maar aparte voorkeur)
  • SQL Server BrowserNT AUTHORITY\LOCAL SERVICE is hier voldoende
  • SSRS — eigen gMSA als SSRS geïnstalleerd is

Rechten die SQL Server zelf regelt

Bij het configureren via SQL Server Configuration Manager voegt SQL Server automatisch de nodige lokale rechten toe aan het service account:

  • Log on as a service
  • Toegang tot de SQL Server directories
  • Lid van de lokale groep SQLServerMSSQLUser$...$MSSQLSERVER

Je hoeft dit niet handmatig te doen — SQL Server Configuration Manager doet dit, net als de SQL Server installer. Gebruik dan ook altijd de Configuration Manager en nooit Services.msc om service accounts te wijzigen.

Services.msc vermijden

Als je het account via Services.msc wijzigt, worden de ACL's en lokale rechten niet bijgewerkt. Gebruik altijd SQL Server Configuration Manager.


Snel controleren welk account actief is

SELECT servicename, service_account
FROM   sys.dm_server_services;