Der SQL-Server unterstützt ein mehrstufiges Berechtigungssystem durch Rollen, Benutzerrechte (GRANT/REVOKE) und Schemata (Schemas). Wichtige Prinzipien:
Beispiel für die Erstellung von Rollen und die Zuweisung von Rechten:
-- Rolle für Analysten erstellen CREATE ROLE Analyst; -- Nur SELECT zu den benötigten Tabellen gewähren GRANT SELECT ON Sales TO Analyst; -- Modifizierung von Daten verbieten REVOKE INSERT, UPDATE, DELETE ON Sales FROM Analyst; -- Rolle einem Benutzer zuweisen GRANT Analyst TO user_ivan;
Häufig werden Rollen für Lesen (read-only), Modifizieren, Administrieren und für spezielle Operationen unterschieden.
Fangfrage: "Kann ein Benutzer, der nur Zugriff auf eine View hat, die zugrunde liegende Tabelle über diese ändern? Geben Sie ein Beispiel an."
Antwort: Ja, wenn die VIEW keine Aggregation/Gruppierung enthält und nicht nur lesezugänglich ist (WITH CHECK OPTION) – können INSERT/UPDATE/DELETE auf der VIEW ausgeführt werden, und die Änderungen gelangen in die zugrunde liegende Tabelle, wenn die Berechtigungen es zulassen.
-- View, die überflüssige Spalten ausschließt CREATE VIEW SalesAsView AS SELECT id, total, manager_id FROM Sales; -- Wenn erlaubt, kann der Benutzer Änderungen wie folgt vornehmen: UPDATE SalesAsView SET total=1000 WHERE id=42; -- Dies betrifft Sales.total für id=42
Lösung: Nur readonly VIEW verwenden oder Änderungen an Daten über Views verbieten.
Geschichte
Projekt: HR-Portal, persönliche Daten der Mitarbeiter.
Fehler: Betreiber hatten Zugriff auf die zugrunde liegende Tabelle über VIEW ohne Einschränkung auf UPDATE – änderten versehentlich die Gehälter der anderen, obwohl die VIEW von Anfang an "nur für Berichte" gedacht war.
Geschichte
Projekt: Buchhaltung, externe Integration.
Fehler: Vergaben der externen Systeme Rechte für INSERT und SELECT auf die gesamte DB statt nur für INSERT in die benötigten Tabellen. Ergebnis: Verwundbarkeit zum Lesen der gesamten DB und mögliches Verstoß gegen die Datenschutzgesetze (GDPR).
Geschichte
Projekt: SaaS-Plattform, Multi-User-Berichte.
Fehler: Alle Kunden arbeiteten in einem Schema mit gemeinsamen Rechten: sahen versehentlich und konnten die Daten anderer bearbeiten. Lösung – Aufteilung in Schemata, separate Rollen und eigene Einschränkungen auf Ebene der Zeilensicherheit (Row Level Security, RLS).