Domanda

Quando provo ad eseguire una vista che include tabelle di schemi diversi, viene generato un privilegio insufficiente ORA-001031. Queste tabelle dispongono dell'autorizzazione di esecuzione per lo schema in cui è stata creata la vista. Se eseguo la dichiarazione SQL della vista, funziona. Cosa mi sto perdendo?

È stato utile?

Soluzione

Come proprietario della tabella devi concedere all'utente l'accesso SELECT sulle tabelle sottostanti che stai eseguendo l'istruzione SELECT come.

grant SELECT on TABLE_NAME to READ_USERNAME;

Altri suggerimenti

Finalmente l'ho fatto funzionare. La risposta di Steve è giusta ma non per tutti i casi. Non riesce quando quella vista viene eseguita da un terzo schema. Affinché funzioni, devi aggiungere l'opzione di concessione:

GRANT SELECT ON [TABLE_NAME] TO [READ_USERNAME] WITH GRANT OPTION;

In questo modo, [READ_USERNAME] può anche concedere il privilegio di selezione sulla vista a un altro schema

Q. Quando è " con l'opzione di concessione " richiesto?

A. quando hai una vista eseguita da un terzo schema.

Esempio:     lo schema DSDSW ha una vista chiamata view_name

a) that view selects from a table in another schema  (FDR.balance)
b) a third shema  X_WORK  tries to select  from that view

Sovvenzioni tipiche:     concedere selezionare su dsdw.view_name a dsdw_select_role;     concedi dsdw_select_role a fdr;

Ma: fdr ottiene     seleziona count (*) da dsdw.view_name;      ERRORE alla riga 1:      ORA-01031: privilegi insufficienti

rilascia la concessione:

grant select on fdr.balance to dsdw with grant option;

ora fdr:     seleziona count (*) da dsdw.view_name;          5 righe

Fammi fare un riassunto.

Quando crei una vista contenente oggetti di proprietari diversi, quegli altri proprietari devono concedere " con l'opzione di concessione " al proprietario della vista. Quindi, il proprietario della vista può concedere ad altri utenti o schemi ....

Esempio: User_a è il proprietario di una tabella denominata mine_a User_b è il proprietario di una tabella denominata yours_b

Diciamo che user_b vuole creare una vista con un join di mine_a e tue_b

Perché la vista funzioni correttamente, l'utente_a deve dare " grant selezionare su mine_a a user_b con l'opzione grant "

Quindi user_b può concedere la selezione su quella vista a tutti.

Se si accede alla vista tramite una procedura memorizzata, la concessione di esecuzione non è sufficiente per accedere alla vista. Devi concedere esplicitamente a selezionare.

Se si accede alla vista tramite una procedura memorizzata, la concessione di esecuzione non è sufficiente per accedere alla vista. Devi concedere esplicitamente a selezionare.

digita semplicemente questo

concedi tutto al pubblico;

Per usare una vista, l'utente deve avere i privilegi appropriati ma solo per la vista stessa, non per i suoi oggetti sottostanti. Tuttavia, se i privilegi di accesso per gli oggetti sottostanti della vista vengono rimossi, l'utente non ha più accesso. Questo comportamento si verifica perché il dominio di sicurezza utilizzato quando un utente interroga la vista è quello del definitore della vista. Se i privilegi sugli oggetti sottostanti vengono revocati dal definitore della vista, la vista diventa non valida e nessuno può utilizzare la vista. Pertanto, anche se a un utente è stato concesso l'accesso alla vista, l'utente potrebbe non essere in grado di utilizzare la vista se i diritti del definitore sono stati revocati dagli oggetti sottostanti della vista.

Documentazione Oracle http://docs.oracle.com/cd/B28359_01 /network.111/b28531/authorization.htm#DBSEG98017

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top