Bundesamt für Sicherheit in der Informationstechnik

M 2.129 Zugriffskontrolle einer Datenbank

Verantwortlich für Initiierung: Informationssicherheitsmanagement, Leiter IT

Verantwortlich für Umsetzung: Administrator

Um einen wirkungsvollen Schutz der Vertraulichkeit und Integrität der Daten einer Datenbank zu erreichen, müssen eine Reihe von Maßnahmen umgesetzt werden. Neben einer Zugangskontrolle der Datenbank, die in M 2.128 Zugangskontrolle einer Datenbank beschrieben wird, sind dies im wesentlichen die folgenden Möglichkeiten der Zugriffskontrolle:

Schutz der Datenbankobjekte

Es sollte eine logische Zuordnung der Datenbankobjekte, also der Tabellen, Indizes, Datenbankprozeduren, etc., zu den Anwendungen erfolgen, die diese Objekte benutzen. Die daraus entstehenden Gruppen von Datenbankobjekten je Anwendung werden eigens hierfür einzurichtenden Kennungen zugeordnet. Damit können die Zugriffsberechtigungen der Datenbankobjekte so eingestellt werden, dass nur über diese speziellen Kennungen eine Modifikation der Objekte stattfinden kann. Greifen mehrere Anwendungen auf dieselben Datenbankobjekte zu, sollten diese als eigene Gruppe isoliert werden.

Werden beispielsweise die Daten zweier Anwendungen A und B in der Datenbank verwaltet, so sind zwei Datenbankkennungen AnwA und AnwB anzulegen. Alle Datenbankobjekte, die eindeutig der Anwendung A zugeordnet werden können, werden mit der Datenbankkennung AnwA angelegt und verwaltet. Analog wird mit den Datenbankobjekten von Anwendung B verfahren.

Ein Beispiel für ein zentrales Datenbankobjekt, das von beiden Anwendungen benutzt wird, sei eine Tabelle, die alle ansteuerbaren Drucker beinhaltet. Datenbankobjekte dieser Kategorie sollten nicht einer Kennung der Anwendungen (AnwA oder AnwB) zugeordnet werden, statt dessen sollten solche Datenbankobjekte unter einer eigenen Kennung (z. B. Druck) zusammengefasst und mit dieser zentralen Kennung verwaltet werden.

Diese speziellen Kennungen sind nicht personenbezogen. Statt dessen erhalten eigens hierfür autorisierte Personen (z. B. der Datenbankadministrator oder der Administrator der zugehörigen Anwendung) das Passwort der benötigten Kennung, falls Modifikationen an den Datenbankobjekten vorgenommen werden müssen (siehe zu diesem Themenbereich auch M 4.68 Sicherstellung einer konsistenten Datenbankverwaltung ).

Schutz der Daten

Durch eine Definition von Views und Prozeduren können spezielle Benutzer-Sichten auf die Daten erzeugt werden, so dass die Daten der Datenbank nach bestimmten Kriterien sichtbar gemacht bzw. unsichtbar gehalten werden. Über einen View oder eine Prozedur wird explizit festgelegt, welche Felder aus einer oder mehreren Tabellen einem Benutzer in welcher Reihenfolge angezeigt werden. Durch spezielle Bedingungen können hierbei die Daten gefiltert und durch spezifische Beschränkungen in ihrem Umfang begrenzt werden. Durch die restriktive Vergabe von Zugriffsrechten (den im folgenden beschriebenen Grants) auf solche Views und Prozeduren können vertrauliche Daten vor unberechtigtem Zugriff geschützt werden.

Durch Trennung von Daten und Funktionalitäten, hier die Trennung der Views und Prozeduren von den echten Daten durch Speicherung in einer eigenständigen Datenbank kann die Sicherheit zusätzlich erhöht werden. Der Benutzer oder die Anwendung greift ausschließlich auf die Views und Prozeduren in der ausgelagerten Datenbank zu. Erst diese Views und Prozeduren greifen auf die in der Datenbank abgelegten Daten zu. In der ausgelagerten Datenbank werden die Zugriffsrechte der Benutzer und Anwendungen zusammengefasst.

Hierbei können Zugriffsrechte (Grants) auf Tabellen, Views, etc. oder sogar auf einzelne Felder einer Tabelle vergeben werden. Diese Rechte sind immer an bestimmte Benutzer, Rollen oder Benutzergruppen gebunden. Vorzuziehen ist hierbei die klare Trennung zwischen Zugangsrechten von Benutzern (meist über Kennung und Passwort) einerseits und Zugriffsrechten von Benutzergruppen und Rollen auf DB-Objekte andererseits. Die Koppelung von Benutzern zu DB-Objekten geschieht dann über die Zuordnung einzelner Benutzer zu den mit den notwendigen Zugriffsrechten ausgestatteten Benutzergruppen oder Rollen. Es können Zugriffsberechtigungen lesender (read), ändernder (update), löschender (delete), neu einfügender (insert) oder neu erstellender (create) Art unterschieden werden, bei Prozeduren kommt die Ausführungsberechtigung (execute) hinzu. Die Schritte zur Vergabe von Zugriffsberechtigungen sollten im Datenbankkonzept präzise beschrieben sein. Grundsätzlich sollten nur die wirklich erforderlichen Zugriffsberechtigungen vergeben werden. Anderenfalls besteht die Gefahr, dass der Überblick über die aktuellen Zugriffsrechte verloren geht und zusätzliche Sicherheitslücken entstehen können. Insbesondere sollte die vom DBMS zur Verfügung gestellte Möglichkeit, Rechte an alle zu vergeben (GRANT ... TO PUBLIC), nicht genutzt werden.

Im allgemeinen ist es nur dem Besitzer eines Datenbankobjektes erlaubt, Zugriffsberechtigungen an andere Benutzer weiterzugeben. Einige Datenbanksysteme stellen jedoch die Möglichkeit zur Verfügung, dass der Besitzer eines Datenbankobjektes auch das Recht, Zugriffsrechte weiterzugeben, an andere Benutzer vergeben kann. Von dieser Möglichkeit sollte nur in begründeten Ausnahmefällen Gebrauch gemacht werden, da der Besitzer des Datenbankobjektes auf diese Weise die Kontrolle über den Zugriff auf die Daten bzw. die Datenbankobjekte verliert.

Restriktiver Datenzugriff über Anwendungen

Anwendungen sollten einen restriktiven Zugriff auf die Daten unterstützen, d. h. in Abhängigkeit der Benutzer-Kennung und der Gruppenzugehörigkeit sollten nur diejenigen Funktionalitäten und Daten zur Verfügung gestellt werden, die ein Benutzer für die Ausführung seiner Aufgaben benötigt. Eine Form der DB-seitigen Realisierung einer solchen Anwendung ist hier die Verwendung von sogenannten Stored Procedures.

Stored Procedures sind Abfolgen von SQL-Anweisungen, die in der Datenbank voroptimiert gespeichert werden. Beim Aufruf einer Stored Procedure müssen nur ihr Name und eventuelle Parameter angegeben werden, um die dahinterstehenden Anweisungen auszuführen. Dies hat zum einen den Vorteil, dass nicht die gesamten Anweisungen zum Datenbank-Server übertragen werden müssen, was bei komplexeren Operationen die Netzbelastung vermindert.

Zum anderen kann das Datenbanksystem die Anweisungen in einer optimierten, vor-compilierten Form ablegen, so dass sie bei Aufruf schneller ausgeführt werden. Die restriktivste Form der Rechtevergabe ist die Vergabe von Zugriffsrechten auf Stored Procedures statt auf Tabellen oder Views. Wenn Zugriffsrechte nur auf Stored Procedures vergeben werden, können die Benutzer nur die von den Datenbankverantwortlichen ausgewählten Operationen ausführen.

Beispiele:

  • In Microsoft Access können verschiedene Berechtigungen vergeben werden, die sich entweder auf die Datenbank selbst (Öffnen/Ausführen, Exklusiv, Verwalten) oder auf die Tabellen und Abfragen beziehen (Daten lesen, Daten aktualisieren, Daten löschen, Daten einfügen). Diese Berechtigungen können dann unterschiedlichen Benutzern oder Benutzergruppen zugeordnet werden. Standardmäßig sind bei Microsoft Access die Gruppen "Administratoren" und "Benutzer" eingerichtet, wobei die Gruppe "Benutzer" die Berechtigungen "Daten lesen" und "Daten aktualisieren" für Tabellen und Abfragen sowie die Berechtigung "Öffnen/Ausführen" für Datenbanken enthält. Für eine detailliertere Kontrolle der Zugriffsrechte können eigene Gruppen definiert werden, an die unterschiedliche Berechtigungen vergeben werden können.
  • In einer Oracle-Datenbank kann mit den Kommandos CREATE ROLE und GRANT die Gruppe "Abteilung_1" erstellt und die Berechtigung erteilt werden, z. B. eine Verbindung zur Datenbank herzustellen (connect), eine Session zu eröffnen (create Session) und Auswahlabfragen auf bestimmte Tabellen durchzuführen (select).
    Indem existierende Datenbank-Benutzer der Gruppe "Abteilung_1" zugeordnet werden, erhalten diese Benutzer alle Berechtigungen der zugeordneten Benutzergruppe. In diesem Beispiel könnte ein ausschließlich der Gruppe "Abteilung_1" zugeordneter Benutzer nur auf die der Gruppe zugeordneten Tabellen und hier ausschließlich lesend (select) aber nicht modifizierend (insert, delete, update, etc.) zugreifen.
  • Eine Stored Procedure unter Oracle mit PL/SQL-Anweisungen hat einen Eingabeparameter, der die Artikelnummer angibt. Die Stored Procedure durchsucht alle zur Berechnung der Ausgabeparameter benötigten Tabellen und gibt unter anderem den Artikelpreis zurück.
    Benutzer erhalten über die Zugriffsrechtevergabe ein Nutzungsrecht nur auf die Stored Procedure, jedoch keinerlei Rechte auf die entsprechenden Tabellen. Damit werden z. B. auch zeitaufwendige Suchoperationen durch eine Auswahlberechtigung direkt auf die zugehörigen Tabellen verhindert.

Prüffragen:

  • Sind die Datenbankobjekte eindeutig einer Datenbankkennung zugeordnet und werden darüber die Zugriffsberechtigungen auf die Datenbankobjekte gruppiert?

  • Werden Zugriffsrechte (Grants) vorzugsweise über Benutzergruppen und Rollen vergeben, denen dann einzelne Benutzer zugeordnet sind?

  • Sind die Schritte zur Vergabe von Zugriffsberechtigungen im Datenbankkonzept präzise beschrieben, so dass nur die für die Aufgabenerfüllung erforderlichen Zugriffsberechtigungen vergeben werden?

  • Unterstützen Anwendungen einen restriktiven Zugriff auf die Datenbank ( z. B. über Stored Procedures) in Abhängigkeit der Benutzer-Kennung und der Gruppenzugehörigkeit?

Stand: 13. EL Stand 2013