Error ORA-01720 con GRANT y VIEW
En la concesión de privilegios (GRANT) a vistas (VIEW) en Oracle se puede producir un error inexperado (ORA-01720) cuando se otorgan privilegios a un usuario sobre una vista que hace referencia a objetos que pertenecen a otro usuario.
Veamos un ejemplo:
- El usuario USUARIO1 es propietario de la tabla TABLA1.
- Al usuario USUARIO2 se le otorga el privilegio de acceso a la tabla TABLA1 del usuario USUARIO1:
GRANT SELECT ON TABLA1 TO USUARIO2;
- De manera que el usuario USUARIO2 podría acceder a la tabla TABLA1 del usuario USUARIO1 de la siguiente forma:
SELECT * FROM USUARIO1.TABLA1;
- En el usuario USUARIO2 se crea una vista VISTA2 que accede a la tabla TABLA1 del usuario USUARIO1:
CREATE VIEW VISTA2 AS SELECT * FROM USUARIO1.TABLA1;
- Si se intenta otorgar al usuario USUARIO3 el privilegio de acceso a la vista VISTA2 del usuario USUARIO2, se produce el error ORA-01720:
GRANT SELECT ON VISTA2 TO USUARIO3;
GRANT SELECT ON VISTA2 TO USUARIO3 * ERROR en línea 1: ORA-01720: la opción Otorgar no existe para 'USUARIO1.TABLA1'
Aunque el usuario USUARIO3 tuviese privilegios de acceso a la tabla TABLA1 del usuario USUARIO1, el error se produciría igualmente. Ni tan siquiera el usuario SYSTEM podría otorgar el privilegio.
La solución a este problema es otorgar al usuario USUARIO2 el privilegio de acceso a la tabla TABLA1 del usuario USUARIO1 con la opción WITH GRANT OPTION:
GRANT SELECT ON TABLA1 TO USUARIO2 WITH GRANT OPTION;
La opción WITH GRANT OPTION proporciona al usuario USUARIO2 la posibilidad de dar a otros usuarios cualquier privilegio que que éste posea, en este caso, el privilegio de acceso al USUARIO3 a la tabla TABLA1 del usuario USUARIO1 a través de la vista VISTA2 del usuario USUARIO2.
Fuente: GRANTs, ORA-01720 y VIEWs de CarlosAL.
5 comentarios:
Está muy bien eso de copiar artículos ajenos y publicarlos como propios.
El original (del 12 de febrero) está en
http://carlosal.wordpress.com/2007/02/12/grants-ora-01720-y-views/
Un saludo.
Carlos.
22 de febrero de 2007, 18:27
Efectivamente, tu artículo me sirvió para resolver este problema el pasado miércoles, lo cual te agradezco enormemente.
Acto seguido, me pareció interesante explicarlo en mi blog, y te aseguro que en ningún momento tuve la intención de copiar tu artículo.
En cualquier caso, espero no haberte ofendido y para demostrar mi buena fe, voy a incluir en el artículo un enlace hacía el tuyo, y voy a agregar tu blog a mi lista de blogs favoritos.
Un saludo.
23 de febrero de 2007, 23:15
OK.
Sin problemas.
Me alegra que lo que escribo le sirva a alguien: para eso lo hago.
Un saludo.
Carlos.
24 de febrero de 2007, 20:48
Hola gracias por tu el comentario me ayudo a solucionar un pequeño problema, respecto a copiar articulo no considero que sea una copia tal cual, ademas esto es internet vamos es imposible evitar la propagacion de articulos sean copias o no.
saludos
5 de julio de 2007, 16:03
Muy bueno, y ya sea a cualquiera de los dos os felicito porque me ha salvado de un bonito fallo que no se me hubiera ocurrido solucionarlo de esta forma
25 de enero de 2008, 12:13
Publicar un comentario