Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Não é possível criar o Oracle View acessando objetos de outros esquemas, apesar das concessões


Conforme observado na documentação (enfase adicionada):

Se você tiver apenas o select privilegiado na tabela subjacente concedida por meio de uma função a, não poderá criar uma exibição com relação a ela. Mesmo se você mudar para a função em geral, terá que manter a concessão explícita no topo para todas as visualizações que deseja criar.

Imagino que isso tenha a ver com a forma como os papéis funcionam. Com uma concessão direta, o Oracle sabe se você pode ver a tabela no outro esquema. Se você conceder select em sua visão para outra pessoa, quando eles consultarem a visão, o Oracle saberá que a cadeia de privilégios está lá. Se sua concessão direta na tabela for revogada, existem mecanismos para invalidar objetos dependentes. Mas o que deve acontecer o privilégio select do papel na mesa é revogado; ou seu acesso à função é revogado; ou apenas dentro de sua própria sessão, o que deve acontecer se você desabilitar essa função - você ainda pode acessar a visualização? É um pouco mais complicado do que parece à primeira vista.

Felizmente, a criação de visualizações deve ser relativamente rara e controlável. A maioria das pessoas acessando a tabela por meio da função não precisará criar uma visualização nela (suponho!).

Outra opção aqui é criar a view no ARIEL esquema e, em seguida, conceda privilégios para APEX_ARIEL e/ou um papel. Se isso é apropriado depende de sua consulta de visualização real e sua motivação para criar a visualização.