Kaldenhoven Wiki

Toekennen van Select privilege op alle tabellen in 1 schema.

Middels Procedure

Procedure aanmaken

CREATE PROCEDURE grant_select(
    username VARCHAR2, 
    grantee VARCHAR2)
AS   
BEGIN
    FOR r IN (
        SELECT owner, table_name 
        FROM all_tables 
        WHERE owner = 'username'
    )
    LOOP
        EXECUTE IMMEDIATE 
            'GRANT SELECT ON '||r.owner||'.'||r.table_name||' to ' || grantee;
    END LOOP;
END; 

Uitvoeren procedure

EXEC grant_select('schemaowner','selectuser');

Middels 1 Query

Query 1

Deze lijkt te werken, Je krijgt wel een error, maar het lijkt wel uitgevoerd.

declare
cursor c1 is select table_name from user_tables;
cmd varchar2(200);
begin
for c in c1 loop
cmd := 'GRANT SELECT ON '||c.table_name||' to select_gim';
execute immediate cmd;
end loop;
end;

Query 2

Deze werkt ook met dezelfde foutmelding als de voorgaande, maar kan ook op bepaalde objecten van toepassing zijn.
oracle-grant-error.png
Alleen voor de Tables.

BEGIN
   FOR R IN (SELECT owner, table_name FROM all_tables WHERE owner='OWNER_GIM') LOOP
      EXECUTE IMMEDIATE 'grant select on '||R.owner||'.'||R.table_name||' to SELECT_GIM';
   END LOOP;
END; 

Voor Views

BEGIN
   FOR R IN (SELECT owner, view_name FROM all_views WHERE owner='OWNER_GIM') LOOP
      EXECUTE IMMEDIATE 'grant select on '||R.owner||'.'||R.view_name||' to SELECT_GIM';
   END LOOP;
END;