- Este tópico contém 1 resposta, 2 vozes e foi atualizado pela última vez 7 anos, 9 meses atrás por José Laurindo Chiappa.
-
AutorPosts
-
14 de dezembro de 2016 às 11:21 pm #108552RayolParticipante
Boa tarde!
Amigos, me deparei com uma situação onde não consegue identificar o problema, tenho o seguinte cenário: Tenho um schema “A”, onde o mesmo possui uma view ‘teste_v’, que me traz as informações certinhas, precisei criar um user “B” e o mesmo precisava de grant de select na view do schema “A”, então, realizei o procedimento de permissão “GRANT SELECT ON TESTE_V TO B”, a permissão foi concedida normal, mas na hora que rodo o select “SELECT * FROM A.TESTE_V” não apresentada nenhuma linha quando conectado com user ‘B’, no user ‘A’ traz todas as informações, não apresenta mensagem de erro nem nada, alguém poderia dar uma luz?
Grato,
Rayol15 de dezembro de 2016 às 5:59 am #108553José Laurindo ChiappaModeradorOpa : bom, só pra variar vc NÂO NOS DIZ nem versão nem Edição desse RDBMS Oracle que vc tá usando, mas se for algo recente E se realmente *** TODAS *** as tabelas referenciadas no texto da query usada pra criar a view pertencem ao schema/usuário que cria a view, e vc está referenciando corretamente, isso deveria funcionar de boa – automagicamente o GRANT de SELECT na view criada pelo dono das tabelas permite a consulta pela view…
Exemplo, usando um RDBMS Oracle Express Edition 11gR2 :
=> confirmando que o usuário HR que vai receber o priv de SELECT na view não tem priv de consulta na(s) tabela(s) do SCOTT, que vai criar a view :
HR@XE:SQL>select * from scott.emp;
select * from scott.emp
*
ERRO na linha 1:
ORA-00942: a tabela ou view nÒo existeHR@XE:SQL>
==> o usuário SCOTT, abaixo, cria um view e dá permissão de SELECT nessa view pro usuário HR, sendo que HR *** não tem permissão NENHUMA em NENHUMA das tabelas do SCOTT :
SCOTT@XE:SQL>create view V_EMP_MENOS_MIL as select empno, ename, sal from emp where sal só pra mostrar que a consulta da view Retorna dados :
SCOTT@XE:SQL>select * from v_emp_menos_mil;
EMPNO ENAME SAL
7369 SMITH 800 7900 JAMES 950
=> o dono da view e das tabelas dá o GRANT de SELECT :
SCOTT@XE:SQL>grant select on v_emp_menos_mil to HR;
ConcessÒo bem-sucedida.
SCOTT@XE:SQL>
==> veja o que acontece quando o HR tenta consultar a view :
HR@XE:SQL>select * from scott.v_emp_menos_mil;
EMPNO ENAME SAL
7369 SMITH 800 7900 JAMES 950
==> IMPORTANTE : veja que o HR (o receptor) CONTINUA NÃO TENDO ACESSO direto às tabelas :
HR@XE:SQL>select * from scott.emp;
select * from scott.emp
*
ERRO na linha 1:
ORA-00942: a tabela ou view nÒo existeHR@XE:SQL>
OK ? Demonstrado ?? Tente repetir esse meu exemplo (especialmente testando com uma view SIMPLES, sem usar NENHUMA função extra, criando-a no mesmo schema ** DONO ** das tabelas, e referenciando o dono ao acessar a view no recpeto, que nem eu fiz – se não funcionar, vc vai ter que acionar teu DBA e confirmar versão/edição desse RDBMS e ver se há algum setting especial nesse banco (talvez PROFILEs de usuários, talvez ROW LEVEL SECURITY) que esteja bloqueando um usuário de acessar objs de outro…
[]s
Chiappa
-
AutorPosts
- Você deve fazer login para responder a este tópico.