2008-09-26 19 views
27

Cuando intento ejecutar una vista que incluye tablas de diferentes esquemas, se lanza un ORA-001031 Privilegios insuficientes. Estas tablas tienen permiso de ejecución para el esquema donde se creó la vista. Si ejecuto la declaración SQL de la vista, funciona. ¿Qué me estoy perdiendo?ORA-01031: privilegios insuficientes al seleccionar ver

Respuesta

19

Como propietario de la tabla, debe otorgar acceso SELECCIONAR en las tablas subyacentes al usuario con el que ejecuta la instrucción SELECT.

1

Si se accede a la vista mediante un procedimiento almacenado, la concesión de ejecución es insuficiente para acceder a la vista. Debes otorgar seleccionar explícitamente.

35

Finalmente lo conseguí para trabajar. La respuesta de Steve es correcta, pero no para todos los casos. Falla cuando esa vista se está ejecutando desde un tercer esquema. Para que funcione, debe agregar la opción de concesión:

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

De esa manera, [READ_USERNAME] también puede otorgar privilegio de selección sobre la vista a otro esquema

+0

¿Qué pasa si dba concede el privilegio. No estoy obteniendo este trabajo aunque el usuario tiene privilegios concedidos por dba a las vistas creadas y las tablas subyacentes. – kinkajou

+1

gracias, todavía está ayudando a la gente :) – Ilaria

2

P. ¿Cuándo es el "con la opción de concesión" necesaria?

A. cuando tiene una vista ejecutada desde un tercer esquema.

Ejemplo: esquema DSDSW tiene una vista llamada 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 

subvenciones típicas: concesión de seleccionar en dsdw.view_name a dsdw_select_role; otorgar dsdw_select_role a fdr;

Pero: fdr obtiene select count (*) de dsdw.view_name; ERROR en la línea 1: ORA-01031 : privilegios insuficientes

tema de la subvención:

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

ahora FDR: select count (*) de dsdw.view_name; 5 filas

4

Déjame hacer una recapitulación.

Cuando construye una vista que contiene objetos de diferentes propietarios, esos otros propietarios tienen que otorgar "con opción de concesión" al propietario de la vista. Así, el propietario de la vista puede conceder a otros usuarios o esquemas ....

Ejemplo: user_a es el propietario de una tabla llamada mine_a USER_B es el propietario de una tabla llamada yours_b

Digamos que quiere usuario_b para crear una vista con una combinación de mine_a y yours_b

para el fin de funcionar bien, user_a tiene que dar "subvención seleccionar en mine_a a USER_B con la opción de concesión"

Entonces usuario_b puede concesión de seleccionar en ese fin de todos.

1

Si se accede a la vista a través de un procedimiento almacenado, la concesión de ejecución es insuficiente para acceder a la vista.Debes otorgar seleccionar explícitamente.

simplemente escriba esta subvención

todos en al público;

0

Para usar una vista, el usuario debe tener los privilegios apropiados, pero solo para la vista en sí, no para los objetos subyacentes. Sin embargo, si se eliminan los privilegios de acceso para los objetos subyacentes de la vista, entonces el usuario ya no tiene acceso. Este comportamiento se produce porque el dominio de seguridad que se utiliza cuando un usuario consulta la vista es el del definidor de la vista. Si los privilegios sobre los objetos subyacentes se revocan desde el definidor de la vista, la vista deja de ser válida y nadie puede usar la vista. Por lo tanto, incluso si a un usuario se le ha otorgado acceso a la vista, es posible que el usuario no pueda usar la vista si los derechos del definidor han sido revocados desde los objetos subyacentes de la vista.

la documentación de Oracle http://docs.oracle.com/cd/B28359_01/network.111/b28531/authorization.htm#DBSEG98017

Cuestiones relacionadas