SQL Server Sicherheitskonzepte: Logins, Benutzer, Rollen & Berechtigungen
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;
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.
-- Ü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;
📚 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;
🧩 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;
⚙️ 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
📐 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.
📋 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