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

Impossibile creare Oracle View accedendo agli oggetti di un altro schema, nonostante le sovvenzioni

Come indicato nella documentazione (enfasi aggiunta):

Se hai solo il privilegio select sulla tabella sottostante concessa tramite un ruolo, non puoi creare una vista su di esso. Anche se passi al ruolo in generale, dovrai mantenere la concessione esplicita in primo piano per tutte le visualizzazioni che desideri creare.

Immagino che questo abbia a che fare con il modo in cui funzionano i ruoli. Con una concessione diretta Oracle sa se puoi vedere la tabella nell'altro schema. Se concedi select sulla tua vista a qualcun altro, quando interrogano la vista Oracle sa che la catena di privilegi è lì. Se la concessione diretta sulla tabella viene revocata, esistono meccanismi per invalidare gli oggetti dipendenti. Ma cosa dovrebbe succedere, il privilegio di selezione del ruolo sul tavolo viene revocato; o il tuo accesso al ruolo è revocato; o solo all'interno della tua stessa sessione, cosa dovrebbe succedere se disabiliti quel ruolo:puoi comunque accedere alla visualizzazione? È un po' più complicato di quanto sembri a prima vista.

Fortunatamente la creazione di viste dovrebbe essere relativamente rara e controllabile. La maggior parte delle persone che accedono alla tabella tramite il ruolo non avrà bisogno di creare una vista su di essa (presumo!).

Un'altra opzione qui è creare la vista in ARIEL schema, quindi concedere i privilegi a APEX_ARIEL e/o un ruolo. L'adeguatezza dipende dalla tua query di visualizzazione reale e dalla tua motivazione per creare la visualizzazione.