sqmSQLTool · Security & Compliance · 2026
Audit-ready in einer Stunde.
Login-Audit, Sysadmin-Konten, SA-Absicherung, TLS-Status, AD-Abgleich — alle Security-Checks in einem Modul. Dokumentiert, reproduzierbar, automatisierbar.
Uwe Janke · Senior SQL Server DBA · dtcSoftware
Motivation
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.
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 und 1.1 sind als unsicher eingestuft (RFC 8996). Auf vielen Systemen noch aktiv, weil der Abschaltprozess komplex ist und Automatisierung fehlt.
Sysadmin-Accounts, Zertifikat-Ablaufdaten, TLS-Konfiguration, SQL-Auth-Logins — jede Auditfrage bedeutet manuelle Recherche auf jedem Server einzeln.
Ueberblick
Login-Audit, Sysadmin-Konten, SA-Absicherung, AD-Abgleich.
TLS-Protokollversionen, Verschluesselungsstatus, Zertifikat-Zuweisung.
Zertifikate erstellen, importieren, CSR stellen — vollstaendiger Lifecycle.
SQL Server Policy Management, Passwort-Rotation, SA-Obfuskierung.
Zugriffsrechte
Vollstaendiger Login-Audit: alle Logins, Rollen, letzte Anmeldung, SQL-Auth vs. Windows-Auth, Status.
| 👤 Alle Logins | Name, Typ (SQL / Windows / Gruppe), Status |
| 🛡 Server-Rollen | Sysadmin, SecurityAdmin, ServerAdmin etc. |
| 📅 Letzte Anmeldung | Wann hat sich dieser Login zuletzt verbunden? |
| ⚠ SQL-Auth | Alle SQL-Logins markiert — unsicherer als Windows-Auth |
| ❌ Deaktiviert | Logins die deaktiviert sind aber noch existieren |
| 💻 Datenbank-Zugriffe | Auf welche Datenbanken hat der Login Zugriff |
# 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
Alle Accounts mit Sysadmin-Rolle — Windows-Gruppen werden aufgeloest, alle indirekten Mitglieder werden sichtbar.
Eine Windows-Gruppe als Sysadmin erscheint praktisch — aber wer ist Mitglied dieser Gruppe? Get-sqmSysadminAccounts loest alle Gruppen auf und listet jeden einzelnen Benutzer.
# 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
SA-Haertung
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
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
AD-Abgleich
Prueft fuer alle Windows-Logins den aktuellen AD-Status — deaktivierte, gesperrte oder abgelaufene Konten die noch als SQL-Login aktiv sind.
| Deaktiviert | AD-Konto deaktiviert, SQL-Login noch aktiv |
| Gesperrt | Account Lockout im AD, aber SQL-Zugriff moeglich |
| Abgelaufen | Passwort oder Konto abgelaufen laut AD |
| Nicht gefunden | Konto existiert nicht mehr im AD |
| Aktiv | AD-Konto in Ordnung |
# 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
TLS-Protokollversionen und Verschluesselungsstatus aller SQL Server Instanzen — welche Systeme sind noch TLS 1.0 / 1.1-faehig?
| TLS-Version | 1.0 (unsicher), 1.1 (veraltet), 1.2 (ok), 1.3 (optimal) |
| SQL-Verschluesselung | ForceEncryption aktiviert? |
| Zertifikat | Self-Signed vs. CA-signiert, Ablaufdatum |
| Cipher Suites | Schwache Verschluesselungsalgorithmen aktiv? |
# 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
Zertifikat-Management
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
New-sqmCertificateRequest — Self-Signed nur fuer Dev/Test.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
Vollstaendiger Zertifikat-Lifecycle: CSR erstellen, signieren lassen, importieren, zuweisen.
New-sqmCertificateRequest — generiert .req-Datei mit korrektem SAN (FQDN, NetBIOS, Cluster-VNN).
CSR an interne oder externe CA senden — signiertes Zertifikat als .cer oder .pfx zurueckbekommen.
Install-sqmCertificate — importiert in korrekten Store, setzt Berechtigungen fuer SQL Server Dienst-Account.
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
Referenz
| Aufgabe | Funktion | Ausgabe |
|---|---|---|
| Login-Audit | Invoke-sqmLoginAudit | Konsole + CSV |
| Sysadmin-Konten | Get-sqmSysadminAccounts | Konsole + CSV |
| SA umbenennen/sperren | Invoke-sqmSaObfuscation | Konsole |
| SA Zufallspasswort | New-sqmRandomSaPassword | Konsole |
| AD-Konto-Abgleich | Get-sqmADAccountStatus | Konsole + CSV |
| TLS-Status | Get-sqmTlsStatus | Konsole + CSV |
| TLS-Zertifikat zuweisen | Set-sqmSqlTlsCertificate | Konsole |
| Self-Signed Cert | New-sqmSqlCertificate | Zertifikat |
| CSR erstellen | New-sqmCertificateRequest | .req-Datei |
| Zertifikat importieren | Install-sqmCertificate | Konsole |
Alle Instanzen, CSV exportieren, mit Vormonat vergleichen
Neue Sysadmins sofort eskalieren
Deaktivierte Konten mit SQL-Login entfernen
Ablaufende Zertifikate (90-Tage-Warnung) fruehzeitig erneuern
Zusammenfassung
Login-Audit CSV, Sysadmin-Report, TLS-Status — alle Audit-Nachweise in einem Lauf erstellt.
Monatliche Runs liefern immer dasselbe Format — Vergleich mit Vorperiode auf Knopfdruck.
Keine Instanz wird vergessen — Pipeline verarbeitet alle Server aus einer Liste.
Umbenennen + Deaktivieren + Zufallspasswort in einem Maintenance-Fenster auf allen Systemen.
Status aller Systeme auf einen Blick — gezielte Abschaltung ohne manuelle Registry-Recherche.
Automatische Warnung 90 Tage vorher — nie wieder abgelaufene SQL-Zertifikate im Produktivbetrieb.