Assegnazione Dinamica di Privilegi
di Mirko Scognamiglio
Questo script realizza l'assegnazione dinamica dei privilegi agli utenti di SELECT,
INSERT, UPDATE, DELETE, REFERENCES sulle tabelle o viste e deve essere lanciato dal
proprietario degli oggetti che state assegnando. E' utile per aggiornare schemi
separati attraverso l'utilizzo di procedure o trigger.
Si noti che il privilegio di REFERENCES può essere assegnato soltanto agli schemi e
quindi questo script non funzionerà se si proverà ad assegnare tali privilegi ad un
RUOLO.
Parametri:
s_user - Lista di utenti/ruoli da assegnare a.Devono essere separati da un punto
-----------------------------------------------------------------------------
set verify off
set pause off
set doc off
set heading off
accept s_user prompt 'Enter USERNAME or PUBLIC to grant to : '
prompt
show user
prompt 'Granting SELECT,INSERT,UPDATE,DELETE,REFERENCES only to &s_user'
prompt
DECLARE
l_sql varchar2(254);
cursor_id integer;
result integer;
l_target_user varchar2(80) := '&s_user';
cursor get_tab is
select table_name from user_tables ;
cursor get_view is
select view_name from user_views;
cursor get_seq is
select sequence_name from user_sequences;
BEGIN
cursor_id:=dbms_sql.open_cursor;
/* Tables first */
FOR tab_rec in get_tab LOOP
l_sql := 'grant select,insert,update,delete,references on '||tab_rec.table_name
||' to '||l_target_user;
dbms_sql.parse(cursor_id,l_sql,1);
result := dbms_sql.execute(cursor_id);
END LOOP;
/* Views */
FOR view_rec in get_view LOOP
l_sql := 'grant select,insert,update,delete on '||view_rec.view_name
||' to '||l_target_user;
dbms_sql.parse(cursor_id,l_sql,1);
result := dbms_sql.execute(cursor_id);
END LOOP;
/* Sequences */
FOR seq_rec in get_seq LOOP
l_sql := 'grant select on '||seq_rec.sequence_name||' to '||l_target_user;
dbms_sql.parse(cursor_id,l_sql,1);
result := dbms_sql.execute(cursor_id);
END LOOP;
dbms_sql.close_cursor(cursor_id);
END;
/
spool off
|