[ORACLE] GRANT auf mehrere Tabellen

Riker

Lieutenant
Registriert
Jan. 2005
Beiträge
862
Hallo,

ich habe hier ein Problem.
Dies gestaltet sich wie folgt:

Ich habe eine DB.
Auf dieser DB habe ich zwei User: User1 und User2.

User1 hat z.B. nur eine Tabelle.
User2 hat z.B. Tabelle 1, Tabele 2, Tabelle 3, Tabelle n, ...

Jetzt möchte ich mit folgendem SQL Befehl:

GRANT [Rechte] ON [Tabelle] TO [User]

dem User1 das Recht geben, auf die Tabellen des User2 Selects auszuführen.
Da es sich jedoch um mehrere 100 Tabellen die der User2 besitzt handelt, möchte ich sowas machen wie (ich bin als User2 angemeldet):

GRANT SELECT on
(select table_name from user_all_tables)
to User1;

Das obige klappt aber nicht.
Hat hier jmd einen Lösungsvorschlag?

Danke im Voraus schonmal! :)
 
Bin zwar kein Oracle-Admin, aber dafür würde sich doch PL/SQL mit Hilfe von dynamischen Statements anbieten:

...
FOR rec IN (SELECT table_name FROM user_all_tables)
LOOP
EXECUTE IMMEDIATE 'GRANT [Rechte] ON ' || rec.table_name || ' TO [User]';
END LOOP;
...
 
@Tommie Darko: War auch mein Gedanke, glaube aber noch, dass man den PL/SQL Block in ein BEGIN ... END; Block einschließen muss, damit es dann im SQL Plus, SqlDeveloper etc als Script ausgeführt werden kann:

Code:
BEGIN
  FOR rec IN (SELECT table_name FROM user_all_tables) LOOP
    EXECUTE IMMEDIATE 'GRANT [Rechte] ON ' || rec.table_name || ' TO [User]';
  END LOOP;
END;
 
Dankedanke!

Genau nach solch einem PL/SQL Konstrukt habe ich gesucht - hatte dies bisher noch nicht programmiert (-en müssen :) ).
Jetzt weiß ich für die Zukunft auch wieder besser Bescheid.

Grüße!
 
@Rossibaer: BEGIN und END hab ich jetzt einfach mal mittels der ... vorausgesetzt :)

@beide: was ich grade mal lustigerweise probiert habe, ist mittels EXECUTE IMMEDIATE einen anonymen PL/SQL Block aufrufen -> funktioniert natürlich. Somit kann man sich dynamischen PL/SQL Code innerhalb von PL/SQL zusammenbauen und ausführen, Code Generation par excellence :evillol: (und maximale Verwirrung stiften bei dem, der's nach dir betreuen muss ...)
 
Hat auch Vorteile, wenn du z.B. mal einen Trigger mit gleichem Inhalt dynamisch für jede Tabelle brauchst. Kannst damit den Trigger innerhalb einer "for loop" für jede Tabelle generieren und dann abfeuern. Geht prima für Audit Trail Geschichten. Es sei denn, es gibt elegantere Lösungen, die mich dann brennend interessieren würden.
 
Zurück
Oben