Rechteausweitung bei GRANT … WITH GRANT OPTION

Da ich bereits mit dem Problem konfrontiert wurde, schreibe ich hier über die Problematik bei der Verwendung der Delegation von Security-Rechten des SQL Servers. Hier kann es sehr schnell zu einer unerwünschten Rechteausweitung kommen die nur schwer zu überblicken ist.

Nehmen wir folgendes Beispiel:

  1. User A bekommt per GRANT SELECT … WITH GRANT OPTION die Berechtigung auf alle Tabellen der AdventureWorks Datenbank lesend zuzugreifen. User A ist durch WITH GRANT OPTION in der Lage das SELECT Recht auf die Datenbank weiterzugeben.
  2. User A wird per DENY SELECT aktiv verboten auf die Tabelle HumanResources.Employee zuzugreifen. Er kann also auf alle Tabellen bis auf diese eine Tabelle per SELECT die Inhalte auslesen.
  3. User B hat bisher keine Rechte. User A gibt User B das allgemeine SELECT Recht auf die Datenbank, vererbt aber nicht das DENY Recht weiter.
  4. User B ist jetzt in der Lage auf alle Tabellen inklusive der Tabelle HumanResources.Employee zuzugreifen.

User A konnte sich durch Vererbung des SELECT Rechts also von seinem DENY Recht trennen. Er kann damit indirekt an Daten kommen, die nicht für ihn bestimmt sind. Das ganze in der Praxis zu entdecken kann durchaus recht komplex werden, wenn die einzelnen Benutzer ihre Rechte über verschiedene Datenbankrollen erhalten (wie es in der Regel gemacht wird).

Vorgehensweise

Damit man niemals in dieses Problem läuft, gilt es ein paar Regeln zu beherzigen:

  1. Niemals GRANT … WITH GRANT OPTION mit DENY Rechten mischen! Zur Not jede einzelnes Recht mit einem einzelnen GRANT setzen.
  2. Bei Verwendung mehrere Datenbankrollen eines Datenbankbenutzers prüfen, dass es nicht zu einer Vermengung von GRANT … WITH GRANT OPTION mit DENY Rechten kommt.
  3. Generell gilt: Falls möglich auf WITH GRANT OPTION komplett verzichten und dieses nur verwenden, falls absolut notwendig.
  4. Security immer so simpel wie möglich gestalten. Keine aufwendigen Hierarchien baue, die am Ende kaum mehr einer verstehen kann (z.B. komplexes Schachteln von Datenbankrollen in anderen Datenbankrollen).
  5. Bei komplexen Security Einstellungen die Berechtigungen immer prüfen und am besten das vier Augen Prinzip anwenden. Man übersieht selbst schneller etwas, als man denkt.