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. :-)