sql >> Base de Datos >  >> RDS >> Oracle

No se puede crear Oracle View accediendo a los objetos de otros esquemas, a pesar de las concesiones

Como se indica en la documentación (énfasis añadido):

Si solo tiene el privilegio de selección en la tabla subyacente otorgado a través de un rol, entonces no puede crear una vista contra él. Incluso si pasa al rol en general, deberá mantener la concesión explícita en la parte superior para cualquier vista que desee crear.

Me imagino que esto tiene que ver con cómo funcionan los roles. Con una concesión directa, Oracle sabe si puede ver la tabla en el otro esquema. Si otorga seleccionar en su vista a otra persona, cuando consultan la vista, Oracle sabe que la cadena de privilegios está ahí. Si se revoca su concesión directa sobre la mesa, existen mecanismos para invalidar los objetos dependientes. Pero lo que debería suceder es que se revoque el privilegio de selección del rol en la tabla; o se revoca su acceso al rol; o simplemente dentro de su propia sesión, ¿qué debería suceder si deshabilita ese rol? ¿Aún puede acceder a la vista? Es un poco más complicado de lo que parece a primera vista.

Afortunadamente, la creación de vistas debería ser relativamente rara y controlable. La mayoría de las personas que acceden a la tabla a través del rol no necesitarán crear una vista en ella (¡supongo!).

Otra opción aquí es crear la vista en el ARIEL esquema, y ​​luego otorgar privilegios a APEX_ARIEL y/o un papel. Si eso es apropiado depende de su consulta de vista real y su motivación para crear la vista.