Probablemente como administradores de Oracle nos habrán solicitado lo siguiente:
Querer consultar o modificar una tabla que está en un Servidor Oracle con un usuario que está en otro servidor Oracle.
Para poder realizar esta tarea, basta con crear un dblink entre ambas bases de datos y crearlo de manera PUBLIC y posteriormente asignar los privilegios(GRANT) de la tabla que queremos poder ver a PUBLIC. Dicha asignación de permisos a PUBLIC la realizaremos en el servidor Oracle donde está la tabla que queremos ver. Para ver que tipo de GRANT podemos asignar puedes consultar esta entrada de blog.
Ejemplo:
En el servidor “origen” creamos el dblink public:
CREATE PUBLIC DATABASE LINK "DBLINK_DESTINO" CONNECT TO SYSTEM --> o el usuario que queramos usar IDENTIFIED BY "<pwd>" USING 'CADENA_CONEXION_DESTINO'; --> que existirá en tnsnames.ora del servidor Origen y donde se especifica el servidor, puerto, etc... donde conectaremos cuando hagamos las consultas
Luego en el servidor “destino”:
Ejecutaremos desde sqlplus por ejemplo y con el propietario de la tabla en cuestión:
GRANT ALL ON <nombre_propietario>.<nombre_tabla> TO PUBLIC;
Para mejorar lo anterior y evitar tener que escribir el nombre del propietario en las consultas, podemos crear un sinónimo de esta manera:
CREATE PUBLIC SYNONYM <nombre_tabla> FOR <nombre_propietario>.<nombre_tabla>;
Lo importante de las sentencias anteriores es especificar “PUBLIC” de esta manera los privilegios se hacen disponibles a todos los usuarios de la base de datos. Y mediante el dblink, también lo haces disponibles a aquellos usuarios que puedan conectarse mediante ese dblink, que en este ejemplo son todos.