Select-Berechtigung auf ein View in einer Oracle Datenbank
Desöfteren ist es gewünscht, dass z.B, zu Reporting-Zwecken, nur ein lesender Zugriff auf eine Datenbank möglich ist. Hierfür wird, z.B. ein neuer Datenbank-Benutzer (neues Schema) auf der Oracle-Datenbank angelegt und dieser bekommt nur lesende Berechtigungen auf die Daten eines anderen Benutzers (Schemas). Falls nun neue Tabellen oder Views hinzukommen, und der lesende Benutzer darauf zugreifen soll, müssen allerdings, über Grants neue Berechtigungen, für die neuen Tabellen und Views auf dem Datenbank-Schema, das die Daten enthält, angelegt werden.
Hier ein Beispiel für einen Grant auf ein View in einem anderen Oracle-Schema der gleichen Oracle-Datenbank. Mit diesem Grant wird eine Select-Berechtigung für einen anderen Benutzer (hier ein nur lesender Benutzer) erteilt. Das selbe kann auch für Tabellen einfach übernommen werden.
GRANT SELECT ON VIEW_REPORTING TO READUSER
/
Und schon kann der lesende Benutzer auf diese Daten zugreifen.
Einen sehr ausführlichen Artikel über die Vergabe von Berechtigungen für Oracle-Datenbank mittels Grants findet Ihr unter “Control Access with Oracle Grant Security”
Hi,
die Frage ist sicher sehr leicht und dumm dass ich es nicht weiß. doch leider find ich nichts im Internet dazu.
Was bedeutet Schema? Aus deinem Artikel klingt es so als sei Schema mit Benutzer gleichzusetzen. Ist das so? Bezeichnet man nicht in der DB-Welt das Design/den Aufbau einer Datenbank mit all seinen Tabelenstrukturen usw. auch als Schema?
vielen Dank.
Nach meinem Kenntnisstand, kann man weitläufig, sowohl den Begriff des Oracle-Users als auch den Begriff Oracle-Schema nutzen.
Ein User ist ein Datenbankbenutzer, der bestimmte Datenbankberechtigungen (wie CONNECT, EXECUTE, CREATE, DROP …) hat und auch eigene Datenbankobjekte (Tables, Views, Procedures,…) besitzen kann. Diese Datenbankobjekte, die ein bestimmter Benutzer besitzt, werden auch Schema genannt.
Vereinfacht gesagt, ein Schema sind alle Datenbankobjekte, die einem bestimmten Datenbankbenutzer gehören.
Ich habe ein Schema A und ein Schema B. In A werden meine Tabellen und Views angelegt, in B möchte ich nun grundsätzlich Leserecht auf alle Objekte in A haben.
Ist es dafür wirklich notwendig, dass für jedes einzelne Objekt (Tabelle, View) ein eigenes Grant abgesetzt werden muss? Oder gibt es hierfür eine Möglichkeit eine generelle Leseberechtigung für B auf A einzurichten?
Desweiteren würde ich gerne in einem Datenbanktool (Toad) im Schemabrowser als User B alle Objekte (diesmal Tabellen, Views, Trigger, Indizies, etc…) des Schematas A angezeigt bekommen. Muss Schema B dafür für alle diese Objekte Synonyme haben oder andere Rechte?
Vielen Dank
Carsten, die Antwort auf deine Frage würde mich auch brennend interessieren…
Hallo,
wir hatten mal ein Problem für einen ODBC-Nutzer. Um die Rechte an den Tabellen für den Benutzer “ODBC” mit der Rolle “odbc_role” zu setzen, kann man sich aus Oracle ein SQL-Skript gererieren lassen:
set heading off
set feedback off
set pages 0
spool grant_odbc_ro.sql
select ‘grant select on produktiv.’ || table_name || ‘ to odbc_role;’
from dba_tables where owner = ‘PRODUKTIV’;
grant odbc_role to odbc;
spool off
exit;
Die entstandene Datei editieren und die ersten (den Befehl) und die letzte Zeile entfernen (“spool off”). Anschließend ablaufen lassen mit “@./grant_odbc_ro.sql”.
Wir haben nun nur ein anderes Problem: Um als Benutzer “odbc” auf die Tabellen des Schemas “produktiv” zugreifen zu können, muss man den Schema-Namen nun mit angeben. Gibt es eine Möglichkeit, dies zu umgehen?
Gruß
MiKe
Hallo MiKe,
ich denke ich habe da eine Lösung.
Vielleicht etwas spät für dich, aller die Lösung ist die Anlage eines Synonyms für deine Tabellen. Vorausgesetzt, du nutzt in deinem eigenen User “odbc” nicht die selben Tabellennamen.
Wichtig hierbei ist, dass dein User Synonyms anlegen darf. Daher angemeldet als SYSDBA folgenden GRANT für den User “odbc” vergeben:
GRANT CREATE SYNONYM TO ODBC;
Hier ein Beispiel für ein SYNONYM:
CREATE SYNONYM testtabelle FOR PRODUKTIV.testtabelle;
Hoffe das hilft dir oder anderen hier…