solucion privilegios ora insuficientes insufficient oracle view

oracle - insufficient - ORA-01031: privilegios insuficientes al seleccionar vista



ora-01031: insufficient privileges (7)

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?


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

grant SELECT on TABLE_NAME to READ_USERNAME;


Déjame hacer un resumen.

Cuando construye una vista que contiene el objeto de diferentes propietarios, esos otros propietarios tienen que otorgar "con opción de concesión" al propietario de la vista. Por lo tanto, el propietario de la vista puede otorgar 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

Supongamos que user_b desea crear una vista con una combinación de mine_a y yours_b

Para que la vista funcione bien, user_a tiene que dar "grant select on mine_a to user_b with grant option"

Entonces user_b puede otorgar seleccionar en esa vista a todos.


Finalmente lo hice funcionar. 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 eso funcione, debes agregar la opción de concesión:

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

De esta forma, [READ_USERNAME] también puede otorgar privilegios de selección sobre la vista a otro esquema


P. ¿Cuándo se requiere la opción "con concesión"?

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

Ejemplo: schema 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: selección de concesión en dsdw.view_name para 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

emitir la concesión:

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

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


Para usar una vista, el usuario debe tener los privilegios apropiados, pero solo para la vista en sí, no para sus 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.

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


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


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

simplemente escribe esto

otorgar todo al público;