Beschreibung der Funktion (insgesamt)

Das Skript dient der Inventarisierung und Analyse von Server-Logins in einer SQL Server-Instanz. Es liefert vier verschiedene Listen:

 
 
Abfrage Beschreibung
1 Gesamtliste aller benutzerdefinierten Logins (SQL, Windows-Benutzer, Windows-Gruppen) ohne System- und Dienstkonten. Zeigt auch den Aktivierungsstatus.
2 Nur SQL Server-Authentifizierungs-Logins (z. B. myAppUser).
3 Nur Windows-Benutzer-Logins (z. B. DOMAIN\john.doe). Ausgeschlossen sind Systemkonten wie NT AUTHORITY\SYSTEM.
4 Nur Windows-Gruppen-Logins (z. B. DOMAIN\SQLAdmins).

Typische Anwendungsfälle:

  • Dokumentation der Datenbankzugriffe für Audits.

  • Vorbereitung von Migrationsprojekten (welche Logins existieren?).

  • Sicherheitsüberprüfung (deaktivierte Logins, unerwünschte Systemkonten).

  • Bereinigung verwaister Logins.

Voraussetzung: Mitgliedschaft in der public-Rolle oder VIEW SERVER STATE (für is_disabled reicht public). Die Abfragen arbeiten ausschließlich mit Katalogsichten und sind ab SQL Server 2005 verfügbar.

 

-- =====================================================================
-- 1. Alle Login-Accounts (SQL, Windows User, Windows Groups)
--    ohne interne System-Logins (##) und ohne Systemkonten (NT AUTHORITY\...)
-- =====================================================================
SELECT 
    name AS Login_Name,
    type_desc AS Account_Type,
    CASE WHEN is_disabled = 0 THEN 'Enabled' ELSE 'Disabled' END AS Status
FROM sys.server_principals 
WHERE TYPE IN ('U', 'S', 'G')
  AND name NOT LIKE '%##%'                     -- interne SQL-Logins
  AND name NOT LIKE 'NT AUTHORITY\%'           -- Windows Systemkonten
  AND name NOT LIKE 'NT SERVICE\%'             -- Windows Dienstkonten
  AND principal_id > 4                         -- echte Benutzer-Logins (sa hat ID=1, etc.)
ORDER BY type_desc, name;

-- =====================================================================
-- 2. Nur SQL Logins (ohne ##, ohne sa, falls gewünscht)
-- =====================================================================
SELECT 
    name AS Login_Name,
    CASE WHEN is_disabled = 0 THEN 'Enabled' ELSE 'Disabled' END AS Status
FROM sys.server_principals 
WHERE TYPE = 'S'
  AND name NOT LIKE '%##%'
  AND name NOT IN ('sa')                       -- optional: sa ausschließen
ORDER BY name;

-- =====================================================================
-- 3. Nur Windows-Benutzer-Logins (ohne Gruppen und Systemkonten)
-- =====================================================================
SELECT 
    name AS Login_Name,
    CASE WHEN is_disabled = 0 THEN 'Enabled' ELSE 'Disabled' END AS Status
FROM sys.server_principals 
WHERE TYPE = 'U'
  AND name NOT LIKE 'NT AUTHORITY\%'
  AND name NOT LIKE 'NT SERVICE\%'
ORDER BY name;

-- =====================================================================
-- 4. Nur Windows-Gruppen-Logins
-- =====================================================================
SELECT 
    name AS Login_Name,
    CASE WHEN is_disabled = 0 THEN 'Enabled' ELSE 'Disabled' END AS Status
FROM sys.server_principals 
WHERE TYPE = 'G'
  AND name NOT LIKE 'NT AUTHORITY\%'           -- i.d.R. keine Gruppen, aber sicherheitshalber
ORDER BY name;
Cookies user preferences
We use cookies to ensure you to get the best experience on our website. If you decline the use of cookies, this website may not function as expected.
Accept all
Decline all
Analytics
Tools used to analyze the data to measure the effectiveness of a website and to understand how it works.
Google Analytics
Advertisement
If you accept, the ads on the page will be adapted to your preferences.
Google Ad
Save