16_8335_303-SQL-DCL - Offene

Werbung
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
Herunterladen