Este script gera uma listagem dando acesso ao usuario user_teste acesso de SELECT as tabelas e views do usuario user_dono

Primeiro rode o comando  SET SERVEROUTPUT ON;

Em seguida rode os dois script como sys ou system ou outro adm.

BEGIN

   FOR rec IN (

      SELECT object_name, object_type

      FROM all_objects

      WHERE owner = 'user_dono'

        AND object_type IN ('TABLE', 'VIEW')

   )

   LOOP

      -- Imprime o comando para conceder permissão SELECT

      DBMS_OUTPUT.PUT_LINE(

         'GRANT SELECT ON SENAC_RJ.' || rec.object_name || ' TO user_teste;'

      );

   END LOOP;

END;

/

 

Em seguida esse script cria SYNONYM de tabelas e views do usuario user_dono

BEGIN

   FOR rec IN (

      SELECT object_name, object_type

      FROM all_objects

      WHERE owner = 'user_dono'

        AND object_type IN ('TABLE', 'VIEW')

   )

   LOOP

      -- Imprime o comando para criar ou recriar o synonym

      DBMS_OUTPUT.PUT_LINE(

         'CREATE OR REPLACE SYNONYM ' || rec.object_name || 

         ' FOR SENAC_RJ.' || rec.object_name || ';'

      );

   END LOOP;

END;

/

 

Depois é so pegar a listagem de GRANT SELECT rodar como usuario Sys por exemplo.

Em seguida pegue a listagem do REATE OR REPLACE SYNONYM e rodo como usuario user_teste

em seguida com o usuario user_teste realize o teste 

select  * from user_dono.tabela where ROWNUM <10

Confirmando o SYNONYM 

select  *  from tabela where ROWNUM <10

No mais 
 COMMIT WORK; para voces. :-)