Em uma aplicação onde uso o banco de dados Oracle, tive um problema ao tentar realizar um select na tabela e o erro retornado era "table or view does not exist".
Primeiro passo, abri meu gerenciador de banco de dados, a tabela estava lá, então ela existia. Mas além da possibilidade da tabela não existir (que é o que a mensagem descreve), esse erro acontece também quando o seu usuário não tem as permissões necessárias para uso da tabela. E esse era o meu problema!
Como era um select simples,foi fácil identificar a tabela que "estava com problema". Mas em casos onde possui vários joins, pode ficar dificil identificar qual tabela não possui as permissões necessárias.
Para auxilia-los e verificar quais são as tabelas que o seu usuário não possui permissões use o script abaixo:
Os valores "P.OWNER" e "P.GRANTEE" são os nomes do seu usuário, na minha aplicação eu tenho um usuário se banco de dados "usuario_01" e um usuário da aplicação "usuario_02".
O valor "P.PRIVILEGE", são os tipos de privilégios que você pretende verificar se foram liberadas. E o valor de "O.OBJECT_TYPE" é onde você quer verificar se as permissões foram liberadas.
Todos os lugares onde seu usuário não tiver permissão será listado, considerando o seu escopo de busca em OBJECT_TYPE.
Legal, mas e para liberar permissão?
Você usa esse script aqui:
Bom, é isso qualquer dúvida deixa seu comentário.
Até a próxima!
WITH PRIVILEGIO AS ( SELECT * FROM SYS.DBA_TAB_PRIVS P WHERE (P.OWNER = 'USUARIO_01') AND (P.GRANTEE = 'USUARIO_02') AND P.PRIVILEGE = 'SELECT' ), OBJETO AS ( SELECT O.OBJECT_NAME NOME FROM DBA_OBJECTS O WHERE (O.OWNER = 'USUARIO_01') AND O.OBJECT_TYPE IN ('TABLE', 'VIEW', 'SEQUENCE', 'SYNONYM') ) SELECT * FROM OBJETO O LEFT OUTER JOIN PRIVILEGIO P ON O.NOME = P.TABLE_NAME WHERE P.PRIVILEGE IS NULL;
Os valores "P.OWNER" e "P.GRANTEE" são os nomes do seu usuário, na minha aplicação eu tenho um usuário se banco de dados "usuario_01" e um usuário da aplicação "usuario_02".
O valor "P.PRIVILEGE", são os tipos de privilégios que você pretende verificar se foram liberadas. E o valor de "O.OBJECT_TYPE" é onde você quer verificar se as permissões foram liberadas.
Todos os lugares onde seu usuário não tiver permissão será listado, considerando o seu escopo de busca em OBJECT_TYPE.
Legal, mas e para liberar permissão?
Você usa esse script aqui:
GRANT SELECT ON NOME_DA_TABELA TO NOME_DO_USUARIO;
Bom, é isso qualquer dúvida deixa seu comentário.
Até a próxima!
Nenhum comentário:
Postar um comentário