Oracle
 sql >> Database >  >> RDS >> Oracle

Concessione dell'autorizzazione agli utenti su uno schema diverso

Non è insolito voler disporre di un unico script per distribuire una modifica. Il fatto è che uno script del genere deve essere eseguito da un utente esperto, perché deve disporre dei privilegi di sistema a QUALSIASI livello. Questo di solito significa un account DBA, preferibilmente un account di applicazione ma altrimenti SYSTEM o SYS.

Quindi lo script che desideri sarebbe simile a questo:

grant select on user_a.t23 to user_b
/
grant select on user_a.t42 to user_b
/
create view user_b.v_69 as
select t23.col1, t42.col2
from   user_a.t42
       join user_a.t23
           on (t42.id = t23.id)
/
grant select on user_b.v_69 to user_c
/

Uno scenario comune è che abbiamo una suite di script individuali che sono stati scritti per essere eseguiti da utenti diversi ma che ora dobbiamo raggruppare in un'unica distribuzione. Gli script originali non contengono i nomi degli schemi e ci sono molte buone ragioni per cui non vorremmo codificarli negli script.

Un modo per creare lo script principale consiste nell'usare la modifica della sintassi CURRENT_SCHEMA:

alter session set current_schema=USER_A
/
@run_grants_to_userb.sql

alter session set current_schema=USER_B
/
@create_view69.sql
@run_grants_to_userc.sql

Abbiamo ancora bisogno di un utente DBA per eseguire lo script master. Un vantaggio del cambio dello schema corrente è che ci consente di distribuire oggetti come i collegamenti al database, che per una stranezza della sintassi non possono avere il nome dello schema nella loro dichiarazione. Uno è che l'utente non cambia, quindi uno script che utilizza la pseudo-colonna USER può produrre risultati indesiderati.