sqmSQLTool · Security & Compliance · 2026

Security & Compliance

Audit-ready in einer Stunde.

Login-Audit, Sysadmin-Konten, SA-Absicherung, TLS-Status, AD-Abgleich — alle Security-Checks in einem Modul. Dokumentiert, reproduzierbar, automatisierbar.

Login-AuditTLS / ZertifikateSA-AbsicherungAD-AbgleichPolicy

Uwe Janke · Senior SQL Server DBA · dtcSoftware

🔒 Login Audit — SQL01\PROD — 2026-05-28
Kritische Befunde
SA-AccountAktiv • Standardname • Sysadmin
sql_backup_userSQL-Auth • Sysadmin • letzte Anmeldung: nie
DOMAIN\jschmidtAD-Konto deaktiviert • SQL-Login noch aktiv
TLS-Status
TLS 1.0Aktiviert • Abschalten empfohlen
TLS 1.2Aktiviert • OK
SQL-ZertifikatSelf-Signed • laeuft ab: 90 Tage

Motivation

Security-Luecken die niemand sieht

💀

SA-Account: aktiv & bekannt

Der SA-Account heisst immer "sa", hat immer Sysadmin-Rechte und ist auf vielen Systemen noch aktiv. Ein Angreifer muss nur das Passwort raten — oder es wurde nie geaendert.

👻

Verwaiste SQL-Logins

Mitarbeiter verlassen das Unternehmen, ihr AD-Konto wird deaktiviert — aber der SQL-Login bleibt aktiv. Ohne regelmaessigen Abgleich sammeln sich Ghost-Accounts an.

🔒

TLS 1.0 noch aktiv

TLS 1.0 und 1.1 sind als unsicher eingestuft (RFC 8996). Auf vielen Systemen noch aktiv, weil der Abschaltprozess komplex ist und Automatisierung fehlt.

📋

Audit ohne Werkzeug = Stunden Arbeit

Sysadmin-Accounts, Zertifikat-Ablaufdaten, TLS-Konfiguration, SQL-Auth-Logins — jede Auditfrage bedeutet manuelle Recherche auf jedem Server einzeln.

✓ sqmSQLTool prueft alle Security-Parameter automatisiert — strukturierte Reports, reproduzierbar, fuer Audits dokumentiert.

Ueberblick

Vier Security-Kategorien. Ein Modul.

🔑

Zugriffsrechte

Login-Audit, Sysadmin-Konten, SA-Absicherung, AD-Abgleich.

🔐

Netzwerk & TLS

TLS-Protokollversionen, Verschluesselungsstatus, Zertifikat-Zuweisung.

📜

Zertifikat-Mgmt

Zertifikate erstellen, importieren, CSR stellen — vollstaendiger Lifecycle.

🛡

Haertung & Policy

SQL Server Policy Management, Passwort-Rotation, SA-Obfuskierung.

10
Security-Funktionen
Login, TLS, Certs, Policy, AD-Abgleich
1h
bis zum Audit-Report
Einmalige Einrichtung — danach automatisch
n
Instanzen parallel
Pipeline — gesamte Landschaft auf einmal

Zugriffsrechte

Invoke-sqmLoginAudit

Vollstaendiger Login-Audit: alle Logins, Rollen, letzte Anmeldung, SQL-Auth vs. Windows-Auth, Status.

Was geprueft wird

👤 Alle LoginsName, Typ (SQL / Windows / Gruppe), Status
🛡 Server-RollenSysadmin, SecurityAdmin, ServerAdmin etc.
📅 Letzte AnmeldungWann hat sich dieser Login zuletzt verbunden?
⚠ SQL-AuthAlle SQL-Logins markiert — unsicherer als Windows-Auth
❌ DeaktiviertLogins die deaktiviert sind aber noch existieren
💻 Datenbank-ZugriffeAuf welche Datenbanken hat der Login Zugriff
⚠ SQL-Auth-Logins mit Sysadmin-Rolle und langer Inaktivitaet sind der haeufigste Audit-Befund.
# Vollstaendiger Login-Audit
Invoke-sqmLoginAudit `
    -SqlInstance "SQL01"

# Nur SQL-Auth-Logins mit Sysadmin
Invoke-sqmLoginAudit `
    -SqlInstance "SQL01" `
    -Filter SqlAuthSysadmin

# Inaktiv seit mehr als 90 Tagen
Invoke-sqmLoginAudit `
    -SqlInstance "SQL01" `
    -InactiveDays 90

# Alle Instanzen, CSV fuer Audit
Get-Content "instances.txt" |
    Invoke-sqmLoginAudit |
    Export-Csv "login_audit.csv" `
        -NoTypeInformation

Sysadmin-Kontrolle

Get-sqmSysadminAccounts

Alle Accounts mit Sysadmin-Rolle — Windows-Gruppen werden aufgeloest, alle indirekten Mitglieder werden sichtbar.

Das Problem mit Gruppen

Eine Windows-Gruppe als Sysadmin erscheint praktisch — aber wer ist Mitglied dieser Gruppe? Get-sqmSysadminAccounts loest alle Gruppen auf und listet jeden einzelnen Benutzer.

🛡 Sysadmin-Accounts — SQL01
Direkte Sysadmin-Logins (3)
saSQL-Auth • AKTIV
DOMAIN\sql_svcService-Account • OK
DOMAIN\DBA_TeamGruppe • 8 Mitglieder
Indirekte Mitglieder via DBA_Team
DOMAIN\u.jankeaktiv
DOMAIN\m.muellerAD-Konto deaktiviert!
# Alle Sysadmin-Accounts inkl. Gruppen
Get-sqmSysadminAccounts `
    -SqlInstance "SQL01"

# Mit AD-Gruppen-Aufloesund
Get-sqmSysadminAccounts `
    -SqlInstance "SQL01" `
    -ExpandGroups

# Nur unerwartete Accounts
Get-sqmSysadminAccounts `
    -SqlInstance "SQL01" |
    Where-Object {
        $_.Name -notmatch "^sa$|svc_|sql_"
    }

# Alle Instanzen als CSV
Get-Content "instances.txt" |
    Get-sqmSysadminAccounts `
        -ExpandGroups |
    Export-Csv "sysadmins.csv" `
        -NoTypeInformation
⚠ Jedes unbekannte Sysadmin-Konto ist ein kritisches Risiko. Abweichungen vom erwarteten Stand sofort eskalieren.

SA-Haertung

Invoke-sqmSaObfuscation & New-sqmRandomSaPassword

Invoke-sqmSaObfuscation

SA-Account haerten: umbenennen, deaktivieren oder beides — auf allen Instanzen in einer Operation.

# SA umbenennen + deaktivieren
Invoke-sqmSaObfuscation `
    -SqlInstance "SQL01" `
    -NewName "disabled_sa" `
    -Disable

# Alle Instanzen
Get-Content "instances.txt" |
    Invoke-sqmSaObfuscation `
        -NewName "sa_disabled" `
        -Disable
⚠ Voraussetzung: mindestens ein weiterer aktiver Sysadmin-Login muss vorhanden sein.

New-sqmRandomSaPassword

Setzt ein kryptographisch zufaelliges Passwort fuer SA — auch wenn SA deaktiviert ist als Brute-Force-Schutz sinnvoll.

# Zufaelliges Passwort setzen
New-sqmRandomSaPassword `
    -SqlInstance "SQL01"

# Passwort in Vault speichern
New-sqmRandomSaPassword `
    -SqlInstance "SQL01" `
    -SaveToVault `
    -VaultPath "\\share\SecureVault"

# Alle Instanzen
Get-Content "instances.txt" |
    New-sqmRandomSaPassword `
        -SaveToVault
✓ Best Practice: SA umbenennen + deaktivieren + Zufallspasswort. Alle drei Massnahmen gemeinsam in einem Maintenance-Fenster.

AD-Abgleich

Get-sqmADAccountStatus

Prueft fuer alle Windows-Logins den aktuellen AD-Status — deaktivierte, gesperrte oder abgelaufene Konten die noch als SQL-Login aktiv sind.

Was geprueft wird

DeaktiviertAD-Konto deaktiviert, SQL-Login noch aktiv
GesperrtAccount Lockout im AD, aber SQL-Zugriff moeglich
AbgelaufenPasswort oder Konto abgelaufen laut AD
Nicht gefundenKonto existiert nicht mehr im AD
AktivAD-Konto in Ordnung
⚠ Verwaiste SQL-Logins (AD-Konto geloescht, SQL-Login noch aktiv) sind ein vergessenes Einfallstor. Besonders kritisch bei ehemaligen Mitarbeitern mit hohen Rechten.
# AD-Status aller Windows-Logins
Get-sqmADAccountStatus `
    -SqlInstance "SQL01"

# Nur problematische Accounts
Get-sqmADAccountStatus `
    -SqlInstance "SQL01" `
    -ShowProblemsOnly

# Alle Instanzen, CSV-Export
Get-Content "instances.txt" |
    Get-sqmADAccountStatus `
        -ShowProblemsOnly |
    Export-Csv "orphaned_logins.csv" `
        -NoTypeInformation

# Deaktivierte direkt entfernen (WhatIf!)
Get-sqmADAccountStatus `
    -SqlInstance "SQL01" `
    -RemoveDisabled -WhatIf

Netzwerk-Sicherheit

Get-sqmTlsStatus

TLS-Protokollversionen und Verschluesselungsstatus aller SQL Server Instanzen — welche Systeme sind noch TLS 1.0 / 1.1-faehig?

Was geprueft wird

TLS-Version1.0 (unsicher), 1.1 (veraltet), 1.2 (ok), 1.3 (optimal)
SQL-VerschluesselungForceEncryption aktiviert?
ZertifikatSelf-Signed vs. CA-signiert, Ablaufdatum
Cipher SuitesSchwache Verschluesselungsalgorithmen aktiv?
🔐 TLS-Status — Alle Instanzen
SQL01\PRODTLS 1.2 • Force Enc. ON • CA-Cert
SQL02\PRODTLS 1.2 • Force Enc. ON • CA-Cert
SQL03\TESTTLS 1.0 aktiv • Force Enc. OFF
SQL04\DEVTLS 1.2 • Self-Signed • 90d bis Ablauf
# TLS-Status einer Instanz
Get-sqmTlsStatus `
    -ComputerName "SQL01"

# Alle Server, nur Probleme
Get-Content "servers.txt" |
    Get-sqmTlsStatus `
        -ShowProblemsOnly

# CSV fuer Compliance-Bericht
Get-Content "servers.txt" |
    Get-sqmTlsStatus |
    Export-Csv "tls_compliance.csv" `
        -NoTypeInformation
⚠ TLS 1.0 und 1.1 sind als "Deprecated" eingestuft (RFC 8996). In regulierten Umgebungen (PCI-DSS, ISO 27001) ist TLS 1.0 ein Audit-Finding.

Zertifikat-Management

Set-sqmSqlTlsCertificate & New-sqmSqlCertificate

Set-sqmSqlTlsCertificate

Weist einem SQL Server Dienst ein Zertifikat zu (Registry-Eintrag + optionaler Dienst-Neustart).

# Zertifikat zuweisen (per Thumbprint)
Set-sqmSqlTlsCertificate `
    -ComputerName "SQL01" `
    -Thumbprint "A1B2C3D4..." `
    -RestartService

# Zertifikat entfernen
Set-sqmSqlTlsCertificate `
    -ComputerName "SQL01" `
    -RemoveCertificate
ℹ Fuer Production: CA-signiertes Zertifikat via New-sqmCertificateRequest — Self-Signed nur fuer Dev/Test.

New-sqmSqlCertificate

Erstellt ein Self-Signed-Zertifikat direkt fuer SQL Server — korrekte EKU (Server Authentication), im richtigen Store.

# Self-Signed Cert erstellen
New-sqmSqlCertificate `
    -ComputerName "SQL01" `
    -ValidYears 3

# Erstellen + sofort zuweisen
New-sqmSqlCertificate `
    -ComputerName "SQL01" `
    -ValidYears 3 `
    -AssignToSqlService `
    -RestartService

Zertifikat-Lifecycle

New-sqmCertificateRequest & Install-sqmCertificate

Vollstaendiger Zertifikat-Lifecycle: CSR erstellen, signieren lassen, importieren, zuweisen.

Lifecycle-Schritte

1
CSR erstellen

New-sqmCertificateRequest — generiert .req-Datei mit korrektem SAN (FQDN, NetBIOS, Cluster-VNN).

2
Bei CA einreichen

CSR an interne oder externe CA senden — signiertes Zertifikat als .cer oder .pfx zurueckbekommen.

3
Importieren

Install-sqmCertificate — importiert in korrekten Store, setzt Berechtigungen fuer SQL Server Dienst-Account.

4
Zuweisen

Set-sqmSqlTlsCertificate — Zertifikat dem SQL Server Dienst zuweisen + Neustart.

# Schritt 1: CSR erstellen
New-sqmCertificateRequest `
    -ComputerName "SQL01" `
    -OutputPath "\\share\Certs" `
    -AdditionalSAN "sql01-vnn","sql01.corp.local"

# Schritt 3: Signiertes Cert importieren
Install-sqmCertificate `
    -ComputerName "SQL01" `
    -CertFile "\\share\Certs\SQL01.cer" `
    -SetPermissions

# Schritt 4: Zuweisen + Neustart
Set-sqmSqlTlsCertificate `
    -ComputerName "SQL01" `
    -CertFile "\\share\Certs\SQL01.cer" `
    -RestartService
✓ SANs werden automatisch mit FQDN, Kurzname und Cluster-VNN befuellt — kein manuelles Zusammenstellen des CSR.

Referenz

Quick Reference

AufgabeFunktionAusgabe
Login-AuditInvoke-sqmLoginAuditKonsole + CSV
Sysadmin-KontenGet-sqmSysadminAccountsKonsole + CSV
SA umbenennen/sperrenInvoke-sqmSaObfuscationKonsole
SA ZufallspasswortNew-sqmRandomSaPasswordKonsole
AD-Konto-AbgleichGet-sqmADAccountStatusKonsole + CSV
TLS-StatusGet-sqmTlsStatusKonsole + CSV
TLS-Zertifikat zuweisenSet-sqmSqlTlsCertificateKonsole
Self-Signed CertNew-sqmSqlCertificateZertifikat
CSR erstellenNew-sqmCertificateRequest.req-Datei
Zertifikat importierenInstall-sqmCertificateKonsole

Empfohlener Audit-Ablauf (monatlich)

1
Login-Audit

Alle Instanzen, CSV exportieren, mit Vormonat vergleichen

2
Sysadmin-Konten

Neue Sysadmins sofort eskalieren

3
AD-Abgleich

Deaktivierte Konten mit SQL-Login entfernen

4
TLS + Zertifikate

Ablaufende Zertifikate (90-Tage-Warnung) fruehzeitig erneuern

ℹ Alle vier Schritte lassen sich als SQL Agent Job planen — Report landet automatisch im CentralPath.
sqmSQLTool - Inventory & DokusqmSQLTool - Zertifikat-Ablauf-ReportsqmSQLTool - SPN-AuditAlwaysOnSetup - AG-Zertifikate

Zusammenfassung

Was Ihr Team gewinnt

📋 Fuer den Auditor

Nachweis in Minuten

Login-Audit CSV, Sysadmin-Report, TLS-Status — alle Audit-Nachweise in einem Lauf erstellt.

Reproduzierbar

Monatliche Runs liefern immer dasselbe Format — Vergleich mit Vorperiode auf Knopfdruck.

Lueckenlos

Keine Instanz wird vergessen — Pipeline verarbeitet alle Server aus einer Liste.

🛡 Fuer den DBA

SA ein fuer alle Mal gesichert

Umbenennen + Deaktivieren + Zufallspasswort in einem Maintenance-Fenster auf allen Systemen.

TLS 1.0 Geschichte

Status aller Systeme auf einen Blick — gezielte Abschaltung ohne manuelle Registry-Recherche.

Zertifikat-Ablauf kein Stress mehr

Automatische Warnung 90 Tage vorher — nie wieder abgelaufene SQL-Zertifikate im Produktivbetrieb.

10
Security-Funktionen
Login, TLS, Certs, SA, AD, Policy
1h
fuer vollstaendigen Audit
Alle Nachweise in einem Lauf
n
Instanzen parallel
Pipeline — kein Server wird vergessen