Recientemente me he encontrado con la necesidad de tener que acceder a un schema “ajeno” desde un usuario en Oracle. El problema es que no me pasaron los scripts que otorgaban los privilegios apropiados para ello… Como se trataba de un trabajo de desarrollo y prueba en local, decidí “saltarme” las normas y entrar a lo duro en el schema ajeno.
Os explico cómo, no es demasiado difícil, y no es necesario ser sysdba para conseguirlo: el usuario propietario del schema al que se desea acceder otorga los privilegios deseados al otro usuario, símplemente. La única necesidad, y esa si es importante, es que el usuario del schema que se va a compartir, debe tener suficientes privilegios para otorgarlos.
Veamos el código (debe ejecutarlo el usuario propietario del schema que se desea compartir):
BEGIN FOR t IN (SELECT * FROM user_tables) LOOP EXECUTE IMMEDIATE 'GRANT SELECT ON ' || t.table_name || ' TO DEST_USER'; END LOOP; END;
Rápidamente, lo que este código hace es, mediante un bucle, recorre todas las tablas del usuario que comparte el schema y otorga los privilegios seleccionados (en este caso solo SELECT) a cada tabla para el usuario DEST_USER (sustituir por el nombre del usuario al que deseamos otorgar los permisos).
Y esto es todo.
Espero haberos sido de ayuda.
Jordi