miércoles, 21 de febrero de 2007

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:

Anónimo dijo...

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.

DAVID MAESTRE dijo...

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.

Anónimo dijo...

OK.

Sin problemas.

Me alegra que lo que escribo le sirva a alguien: para eso lo hago.

Un saludo.

Carlos.

Anónimo dijo...

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

Unknown dijo...

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

Publicar un comentario

 

RSS RSS