In diesem Anschnitt geht es um die SQL Anweisungen, mit denen ich den Zugriff auf das Datenbankschema steuern kann. All diese Befehle werden unter dem Begriff SQL – DLC – Data Control Language zusammengefasst. Die wichtigsten Befehle werden wir uns in diesem Abschnitt ansehen. Die meisten SQL Befehle sind jedoch sehr herstellerspezifisch, da der SQL Standard nicht alles abdeckt, was man in der Praxis braucht. Wichtig an dieser Stelle ist, dass wir die Idee bzw. die Zielsetzung der SQL-DCL Anweisungen zu verstehen. 1 In diesem Abschnitt werden wir zunächst der Frage nachgehen: WAS ist SQLDCL überhaupt und wie hängt dies mit der Benutzerverwaltung zusammen. Danach werden wir uns die wichtigsten SQL Befehle näher ansehen. Die wichtigsten Befehle sind: • SQL Anweisungen zum Anlegen und Löschen von Benutzern Authentifizierung • SQL Anweisungen zum Erteilen bzw. Entziehen von Zugriffsrechten Autorisierung 2 SQL-DCL steht für SQL – Data Control Language. Hierbei geht es um die Zugriffssteuerung auf ein Datenbankschema und dessen Inhalten. Daher spielen diese Anweisungen aus der Sicht der „IT-Security“ eine sehr wichtige Rolle. In den meisten kommerziellen Datenbanken sind wichtige Informationen für den Betrieb eines Unternehmens bzw. einer Organisation hinterlegt, um sowohl den operativen Betrieb zu gewährleisten als auch als Grundlage für strategische Entscheidungen. Besonders schutzwürdig sind dabei Daten/Informationen,: • Die ausschließlich firmenintern genutzt werden dürfen und vertraulich behandelt werden müssen Schutz von geistigem Eigentum, Umsatz, Gewinn, Boni, Gehälter, Produktionsdaten,.. usw. • Welche die Privatsphäre betreffen Alter, Gehalt, Kennwörter, Telefonnummern, … usw. Daher ist es notwendig den Zugriff auf die Daten steuern zu können. Dies genau ist das Ziel der SQL-DCL Anweisungen. 3 Zunächst schauen wir uns an, welche Möglichkeiten es gibt, um festlegen zu können, WER auf eine Datenbank zugreifen darf. Anmelden / Authentifizieren Dies wird darüber gesteuert, dass sich jeder Benutzer bei der Datenbank anmelden muss. Handelt es sich um eine Anwendung, dann muss diese sich ebenfalls anmelden, um eine sogenannte Datenbank-Session aufzubauen. (vgl. JAVA – JDBC – Datenbank Schnittstelle) . Dies bedeutet, dass ein Datenbanksystem folgende Kenntnisse hat: • Eine Liste der gültigen Benutzernamen • Verfahren um sicherzustellen, das es sich um den „wirklichen Benutzer“ handelt, der sich anmeldet. Dies erfolgt in der Regel über eine Passwort In der Praxis bieten die Datenbank-Hersteller verschiedene Verfahren an. Database Authentication DBMS Benutzerverwaltung Jedes Datenbanksystem bietet hierzu eine eigene Benutzerverwaltung an. Dieses 4 Verfahren wird immer angeboten. Daher werden wir uns dieses Verfahren näher ansehen. Single Sign-on Bei diesem Verfahren wird davon ausgegangen, dass sich ein Benutzer bereits gegenüber dem verwendeten Betriebssystem authentifiziert hat. Bei SQL Server und dem SQL Interpreter ist dies wie folgt umgesetzt. Anstelle eines Benutzernamens und einem Passwort kann man bei dem Aufruf des SQL Interpreters die Option –E an der Kommandozeile angeben und dem Datenbanksystem mitzuteilen, dass der aktuell eingeloggte Benutzer-Account verwendet werden soll. Nähere Informationen finden Sie z.B. unter https://msdn.microsoft.com/dede/library/bb669066(v=vs.110).aspx Bei Oracle gibt es ein ähnliches Verfahren. Information finden Sie unter : https://docs.oracle.com/cd/B19306_01/network.102/b14266/authmeth.htm#i1007525 Netzwerk Authentication - / LDAP Diese Art der Authentifizierung findet man meist bei Datenbanken, die in einer Enterprise Umgebung eingesetzt werden . Hierbei werden die Zugangsdaten in einem eigenen Directory-Service ( Verzeichnisdienst ) abgelegt, so dass die Zugangsdaten an einer zentralen Stelle gepflegt werden können. Hierzu muss der Verzeichnisdienst dem DBSM bekannt sein und diese muss darauf zugreifen können Sie auch: Oracle Authentication Methods https://docs.oracle.com/cd/B19306_01/network.102/b14266/authmeth.htm#BABCGGEB SQL Server Authentication https://msdn.microsoft.com/dede/library/bb669066(v=vs.110).aspx 4 Als nächste wollen wir uns ansehen, wie man Benutzer anlegen kann, damit diese auf die Datenbanktabellen zugreifen kann. Damit wir einen solchen Befehl ausführen können, müssen wir uns zunächst ansehen, was ich machen muss, um einen solchen Befehl überhaupt ausführen zu können. Benutzer - Genesis Bei der Installation eines Datenbank-Managementsystem wird immer auch eine Administrator-Benutzer angelegt. Der Benutzername und das Passwort können bei der Installation angegeben werden bzw. in den Handbüchern zu entnehmen. Wenn man sich nun als Administrator in die Datenbank einloggt, kann man weitere Benutzer anlegen. Anlegen weiterer Benutzer Hat man sich als Administrator eingeloggt, so kann man mit dem SQL Befehl CREATE USER user_name PASSWORD pwd 5 Einen neuen Benutzer anlegen. Darüber hinaus kann man jedem Benutzer auch eine Rolle zuweisen. Diese dienen dazu, jedem Benutzer einen Satz von Privilegien zuzuordnen. Was genau unter Privilegien zu verstehen ist, schauen wir uns später an , wenn wir uns mit GRANT und REVOKE beschäftigen wollen. Als nächste schauen wir uns an, wie wir Benutzer auch wieder löschen können. Sieh auch CREATE USER Details : • H2 Create User http://www.h2database.com/html/grammar.html?highlight=tableName&search=Table# create_user • ORACLE Create User https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_8003.htm • SQL Server Create User https://msdn.microsoft.com/de-de/library/ms173463.aspx Siehe auch CREATE ROLE • H2 Create Role http://www.h2database.com/html/grammar.html?highlight=tableName&search=Table# create_role • ORACLE Create Role https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_6012.htm • SQL SERVER Create Role https://msdn.microsoft.com/dede/library/ms187936.aspx 5 Mit der Anweisung DROP USER benuzterName Kann man einem Benutzer mit dem angegebenen Namen aus der Benutzerverwaltung löschen. Analog gilt dabei auch, dass man mit DROP ROLE eine Rolle löschen kann. Hinweis: Besteht zum Zeitpunkt des Löschens noch eine Datenbankverbindung, wird diese meistens sofort unterbrochen. Genaue Angaben über das Verhalten sind den Angaben des jeweiligen Herstellers zu entnehmen. Nachdem wir gesehen haben, wie man Benutzer anlegen und löschen kann, wollen wir uns den Privilegien zuwenden. Hierzu haben wir ja schon die Anweisungen wie CREATE ROLE und DROP ROLE kennengelernt. Wobei wir bis hierher nur wissen, dass es Rollen gibt und dass man Benutzern Rollen zuweisen kann. 6 Wenn man nun für einzelne Rollen Privilegien zuweisen möchte, dann erfolgt dies mittels einer GRANT Anweisung. Entziehen kann man die Privilegien mittels REVOKE Anweisung. Daher schauen wir uns als nächstes GRANT und REVOKE näher an. TIPP: Bevor Sie weitergehen, führen Sie die Übungen zum Anlegen und Löschen von Benutzern aus dem Übungsbuch durch. 6 Das Themengebiet ROLLEN, Privilegien (Autorisation) ist sehr umfangreich. Daher beschränken wir uns an dieser Stelle auf die wesentlichen Aspekte. Wir betrachten nur die Privilegien, wenn es darum geht, auf Tabelleninhalte zugreifen zu können. Wenn wir also Zugriff auf Tabelleninhalte gestatten wollen, dann müssen wir folgende Angaben bei der GRANT Anweisung machen: • Für welche Tabelle soll der Zugriff gestattet werden • Welche Art von Zugriff soll gestattet werden Analoge Angaben gelten dabei auch, wenn Rechte / Privilegien mittels REVOKE entzogen werden sollen • Für welche Tabelle soll der Zugriff entzogen werden • Welche Art von Zugriff soll entzogen werden. Um welche Arten von Zugriffen es sich handeln kann, schauen wir uns als nächstes an. 7 In dieser Abbildung sehen Sie die wichtigsten Zugriffsrechte (Permissions), die in der Praxis eine Rolle spielen. Auf der linken Seite sehen Sie die Zugriffsrechte, wenn es um den Zugriff aus Tabelleninhalte geht. Dort sind finden Sie die Schlüsselwörter aufgeführt, um festlegen zu können, welche der CRUD Operationen erlaubt sind. Die GRANT Syntax ist wie folgt: GRANT privilege_name ON object_name TO {user_name | |role_name} Zum Beispiel bedeutet folgende GRANT select ON adressen Der Benutzer hat das Recht eine SELECT Anweisung auf der Tabelle „adressen“ 8 ausführen zu dürfen. Er hat dabei Zugriff auf alle Spalten. Hinweis Manche Hersteller wie z.B. SQL Server erlauben dabei zusätzlich das Lese-Recht nur für bestimmte Spalten. Analoges gilt nun auch für die REVOKE Anweisung, bei der dann die Zugriffsrechte entzogen werden können. Auf der rechten Seite sehen Sie der Vollständigkeit halber einen Hinweis auf gespeicherte Funktionen. Hierzu ist anzumerken, dass wir bis hierher ‚gespeicherte Funktionen‘ noch gar nicht betrachtet haben. Daher eine kleine Ergänzung bzw. eine Vorschau. Es handelt sich hierbei um die Möglichkeit sogenannte Prozeduren zu erstellen, so wie wir sie von anderen Programmiersprachen her kennen. Dies Prozeduren haben die Besonderheit, dass sie nur SQL Anweisungen enthalten und in der Datenbank selbst abgelegt sind. Die Ausführung solcher Prozeduren kann von einem Benutzer angestoßen werden. Nun ist auch offensichtlich, was das Recht „EXCEUTE“ bedeutet. Ein Benutzer darf die Ausführung einer solchen Prozedur anstoßen. Dem Thema ‚gespeicherte Prozeduren‘ ist ein extra Abschnitt gewidmet. An dieser Stelle wollen wir daher nicht weiter darauf eingehen. 8 9 10