SQL Server Sicherheitskonzepte: Logins, Benutzer, Rollen & Berechtigungen

📅 13. Mai 2025 ✍️ Von einem erfahrenen SQL Server DBA ⏱ 10 Min. Lesezeit

Einleitung: Die Grundlage jeder sicheren Datenbank

Die Sicherheit Ihrer SQL Server Datenbanken steht und fällt mit einem durchdachten Berechtigungskonzept. Doch gerade hier passieren viele Fehler: Zu weitreichende Rechte, fehlende Trennung von Instanz- und Datenbankebene, undurchschaubare Rollenstrukturen. In diesem Artikel erläutern wir die grundlegenden Bausteine – von Logins über Benutzer bis hin zu Rollen und Schemata – und zeigen praxisnahe Konzepte für eine sichere, wartbare Berechtigungsstruktur.

🏢 1. Login vs. Benutzer – Der Unterschied, den viele nicht kennen

Eine der ersten Hürden im SQL Server Sicherheitsmodell ist die Unterscheidung zwischen Login (Instanz-Ebene) und Benutzer (Datenbank-Ebene).

  • Login: Berechtigt zum Verbinden mit der SQL Server-Instanz. Existiert auf Server-Ebene (sys.server_principals).
  • Benutzer: Repräsentiert ein Login innerhalb einer bestimmten Datenbank. Existiert in jeder Datenbank separat (sys.database_principals).
-- Login auf Instanz-Ebene erstellen
CREATE LOGIN AppUser WITH PASSWORD = 'SecurePw123!';

-- In der Datenbank "MyDB" einen Benutzer für dieses Login anlegen
USE MyDB;
CREATE USER AppUser FOR LOGIN AppUser;
💡 Merksatz: Ein Login allein erlaubt keinen Zugriff auf Datenbankinhalte. Erst der Datenbank-Benutzer verknüpft das Login mit den Rechten in der Datenbank.

Windows-Logins funktionieren analog: Der Windows-Benutzer oder die Gruppe wird als Login angelegt und in den Datenbanken als Benutzer zugeordnet.

🔐 2. Authentifizierungsmodi: Windows vs. SQL Server

SQL Server unterstützt zwei Authentifizierungsmodi – beide haben ihre Berechtigung.

  • Windows-Authentifizierung (integrierte Sicherheit): Nutzt Active Directory, keine Passwörter in Anwendungen, zentrales Identity Management. Empfohlen für interne Netzwerke und Domänenumgebungen.
  • SQL Server-Authentifizierung: Login/Passwort wird von SQL Server verwaltet. Erforderlich für Legacy-Anwendungen oder wenn keine Domäne verfügbar ist. Weniger sicher, daher mit starken Passwortrichtlinien kombinieren.
⚠️ Wichtige Sicherheitseinstellung: Der sa-Account sollte umbenannt und deaktiviert werden, es sei denn, es gibt zwingende Gründe. Verwenden Sie stattdessen dedizierte SQL-Logins mit minimalen Rechten.
-- Überprüfung des Authentifizierungsmodus
SELECT SERVERPROPERTY('IsIntegratedSecurityOnly'); -- 1 = nur Windows, 0 = gemischt

-- Deaktivierung des sa-Logins (empfohlen)
ALTER LOGIN sa DISABLE;

👥 3. Serverrollen – Berechtigungen auf Instanz-Ebene

Serverrollen bündeln Berechtigungen auf der gesamten SQL Server-Instanz. Sie werden einem Login zugewiesen.

  • sysadmin: Unbeschränkte Rechte auf der Instanz (nur für Kernadministratoren).
  • securityadmin: Verwaltung von Logins und Berechtigungen auf Server-Ebene.
  • serveradmin: Server-weite Konfiguration, Shutdown, etc.
  • setupadmin: Verwaltung von Linked Servern und erweiterten gespeicherten Prozeduren.
  • processadmin: Beenden von Prozessen.
  • diskadmin: Verwaltung von Datenträgerdateien.
  • dbcreator: Erstellen, Ändern und Löschen von Datenbanken.
  • bulkadmin: Ausführen von BULK INSERT.
-- Login einer Serverrolle zuweisen
ALTER SERVER ROLE dbcreator ADD MEMBER AppUser;
🚨 Achtung: Die Rolle sysadmin gewährt vollständige Kontrolle. Vergeben Sie sie nur im absoluten Ausnahmefall und dokumentieren Sie dies.

📚 4. Datenbankrollen – Berechtigungen innerhalb einer Datenbank

Innerhalb jeder Datenbank gibt es feste und benutzerdefinierte Rollen. Sie erleichtern die Rechteverwaltung erheblich.

Feste Datenbankrollen (vordefiniert):

  • db_owner: Vollzugriff auf die Datenbank (vergleichbar mit sysadmin auf Datenbankebene).
  • db_securityadmin: Verwaltung von Rollen und Berechtigungen in der Datenbank.
  • db_accessadmin: Verwaltung von Datenbank-Benutzern.
  • db_backupoperator: Erstellen von Sicherungen.
  • db_ddladmin: Ausführen von DDL-Anweisungen (CREATE, ALTER, DROP).
  • db_datawriter: INSERT, UPDATE, DELETE auf alle Benutzertabellen.
  • db_datareader: SELECT auf alle Benutzertabellen.
  • db_denydatawriter/reader: Explizite Verweigerung von Schreib-/Lesezugriffen.
-- Datenbankbenutzer einer festen Rolle zuweisen
USE MyDB;
ALTER ROLE db_datareader ADD MEMBER AppUser;

Benutzerdefinierte Datenbankrollen:

Für feingranulare Berechtigungen (z. B. nur Zugriff auf bestimmte Tabellen) erstellen Sie eigene Rollen.

CREATE ROLE SalesReporting;
GRANT SELECT ON Sales.Orders TO SalesReporting;
ALTER ROLE SalesReporting ADD MEMBER AppUser;
💡 Best Practice: Verwenden Sie nach Möglichkeit Rollen statt direkter Berechtigungen pro Benutzer. Das vereinfacht Auditierung und spätere Änderungen.

🧩 5. Schemata zur logischen Gruppierung

Schemata sind Container für Tabellen, Sichten und andere Objekte. Sie erleichtern die Strukturierung (z. B. Sales, HR, Logging) und dienen auch der Berechtigungsvergabe: Man kann einer Rolle Rechte auf ein gesamtes Schema erteilen, statt auf jedes Objekt einzeln.

-- Schema erstellen und einer Rolle SELECT-Rechte geben
CREATE SCHEMA HR AUTHORIZATION dbo;
GRANT SELECT ON SCHEMA::HR TO HRReader;
⚠️ Wichtiger Sicherheitsaspekt: Standardmäßig ist das Standardschema eines Benutzers dbo. Wenn ein Benutzer Objekte ohne Schemaqualifikation erstellt, landen sie im Standardschema. Daher sollte man das Standardschema gezielt setzen.

⚙️ 6. Berechtigungsarten: GRANT, DENY, REVOKE

Die drei grundlegenden Anweisungen steuern Zugriffe auf Objekte.

  • GRANT: Erteilt eine Berechtigung (z. B. SELECT, INSERT, UPDATE, DELETE, EXECUTE, ALTER, CONTROL).
  • DENY: Verweigert eine Berechtigung explizit – hat Vorrang vor GRANT (auch über Rollen). Verwenden Sie DENY sparsam, da es leicht zu Verwirrung führt.
  • REVOKE: Entfernt eine zuvor erteilte oder verweigerte Berechtigung (neutralisiert GRANT/DENY).
GRANT SELECT, INSERT ON dbo.Customers TO SalesRole;
DENY DELETE ON dbo.Customers TO SalesRole;
REVOKE INSERT ON dbo.Customers TO SalesRole; -- INSERT wird neutral, SELECT bleibt
🚨 Häufiger Irrtum: REVOKE ist nicht gleich DENY. DENY blockiert – REVOKE hebt eine explizite Berechtigung lediglich auf.

📐 7. Ein durchdachtes Sicherheitskonzept – Schritt für Schritt

Ein robustes Berechtigungskonzept folgt diesen Prinzipien:

  • Minimum Viable Privileges (MVP): Jeder Benutzer/Prozess erhält nur die minimal nötigen Rechte.
  • Trennung von Instanz- und Datenbankadministration: Nicht jeder DBA benötigt sysadmin-Rechte. Oft reicht db_owner in bestimmten Datenbanken.
  • Rollenbasierte Zugriffskontrolle (RBAC): Berechtigungen werden Rollen zugeordnet, Benutzer werden Mitglied von Rollen.
  • Verwendung von Schemata: Gruppieren Sie Objekte logisch und vergeben Sie Rechte auf Schemaebene.
  • Regelmäßige Überprüfungen: Mit Berichten über Benutzerrechte und Rollenzugehörigkeiten.
-- Beispiel für eine rollenbasierte Struktur in einer Anwendungsdatenbank
CREATE ROLE AppReader;
CREATE ROLE AppWriter;
CREATE ROLE AppAdmin;

GRANT SELECT ON SCHEMA::Sales TO AppReader;
GRANT INSERT, UPDATE, DELETE ON SCHEMA::Sales TO AppWriter;
GRANT ALTER, CONTROL ON SCHEMA::Sales TO AppAdmin;

ALTER ROLE AppReader ADD MEMBER ReportingUser;
ALTER ROLE AppWriter ADD MEMBER ApplicationLogin;
ALTER ROLE AppAdmin ADD MEMBER SeniorDBA;

🛠️ 8. Nützliche Abfragen für das Berechtigungsmanagement

Die folgenden Abfragen helfen Ihnen, den Überblick zu behalten.

-- Alle Logins auf Instanzebene mit ihren Serverrollen
SELECT p.name AS LoginName, r.name AS ServerRole
FROM sys.server_principals p
LEFT JOIN sys.server_role_members rm ON p.principal_id = rm.member_principal_id
LEFT JOIN sys.server_principals r ON rm.role_principal_id = r.principal_id
WHERE p.type IN ('S', 'U'); -- SQL Login, Windows Login

-- Benutzer und Datenbankrollen in einer Datenbank
USE MyDB;
SELECT u.name AS UserName, r.name AS DatabaseRole
FROM sys.database_principals u
LEFT JOIN sys.database_role_members rm ON u.principal_id = rm.member_principal_id
LEFT JOIN sys.database_principals r ON rm.role_principal_id = r.principal_id
WHERE u.type IN ('S', 'U'); -- SQL User, Windows User

-- Explizite Berechtigungen eines Benutzers auf Objekte
SELECT class_desc, object_name(major_id) AS ObjectName, permission_name, state_desc
FROM sys.database_permissions
WHERE grantee_principal_id = DATABASE_PRINCIPAL_ID('AppUser');

🎓 9. Häufige Fehler und wie man sie vermeidet

  • Jeder Benutzer bekommt sysadmin / db_owner: Führt zu Sicherheitslücken und unbeabsichtigten Änderungen. → Statten Sie nur Administratoren mit diesen Rollen aus.
  • Direkte Berechtigungen auf Benutzer statt Rollen: Erschwert die Wartung und erhöht Fehleranfälligkeit. → Definieren Sie Rollen nach Aufgabenprofilen.
  • Vergessen des Schemabesitzers: Wenn ein Benutzer Objekte in einem falschen Schema erstellt, kann die Berechtigungssteuerung versagen. → Setzen Sie das Standardschema explizit.
  • Login ohne Datenbankbenutzer angelegt: Der Benutzer kann sich zwar verbinden, hat aber keinen Zugriff auf Datenbanken. → Den Benutzer immer in den benötigten Datenbanken anlegen.
  • Verwendung von guest in Datenbanken: Das Gastkonto gewährt anonymen Zugriff. Standardmäßig ist es deaktiviert – lassen Sie es deaktiviert, es sei denn, Sie benötigen explizit öffentlichen Zugriff.
💡 Profi-Tipp: Erstellen Sie eine Checkliste für neue Berechtigungen: Welche Datenbank, welche Rollen, welche Schemata benötigt der Benutzer? Vermeiden Sie so "Überberechtigungen".

📋 Fazit

Ein sicheres SQL Server Berechtigungskonzept basiert auf dem Zusammenspiel von Logins, Datenbankbenutzern, Rollen und Schemata. Die klare Trennung von Instanz- und Datenbankebene, das Prinzip der minimalen Rechte und die Nutzung von Rollen sind die Schlüssel zu wartbaren, sicheren Systemen. Nehmen Sie sich die Zeit, ein passendes Rollenmodell zu entwerfen – Ihre Auditoren und zukünftigen Administratoren werden es Ihnen danken.

powered by dtcSoftware

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