2013-03-16 4 views
8

Ich habe 3 Tabellen table1, table2, table3. Ich möchte diese Tabellen einem Benutzer, Benutzer1, gewähren (zum Beispiel auswählen).Grant SELECT auf mehrere Tabellen Oracle

Ich weiß, dass ich mit erteilen kann:

grant select on table1 to user1; 
grant select on table2 to user1; 
grant select on table3 to user1; 

Kann ich gewähren den drei Tabellen mit nur 1 Abfrage user1?

Dank

+0

mögliche Duplikate von [Oracle SQL privelege Autorisierung für mehrere Attribute und Tabellen mit einer Anweisung] (http://stackoverflow.com/questions/13106087/oracle-sql-privelege-authorization-on-multiple-attributes-and-tables -mit-einer-st) –

Antwort

13

Nr Als documentation shows, können Sie nur zu einem Zeitpunkt Zugriff auf ein Objekt gewähren.

5

mein Vorschlag ist ... Rolle in Oracle erstellen, um diese Rolle

grant select on <table_name> to <role_name>; 

dann diese Gruppe von Berechtigungen für jeden Benutzer über diese Rolle zuweisen Verwendung mit

create role <role_name>; 

dann Berechtigungen zuweisen, indem Sie

6

Sie können es mit dynamischer Abfrage tun, führen Sie einfach das folgende Skript in pl-sql oder sqlpl us:

select 'grant select on user_name_owner.'||table_name|| 'to user_name1 ;' from dba_tables t where t.owner='user_name_owner' 

und dann das Ergebnis ausführen.

+0

sollen Sie das Ergebnis kopieren/einfügen, um es auszuführen? –

0

Dieser arbeitete für mich auf meine Oracle-Datenbank:

SELECT 'GRANT SELECT, insert, update, delete ON mySchema.' || TABLE_NAME || ' to myUser;' 
FROM  user_tables 
where table_name like 'myTblPrefix%' 

Dann die Ergebnisse kopieren, um sie in den Editor einfügen, so dass sie dann wie ein Skript ausführen.

Sie könnten auch ein Skript schreiben und "Execute Immediate" verwenden, um das generierte SQL auszuführen, wenn Sie keine zusätzlichen Kopier-/Einfügeschritte benötigen.