O Oracle permite aos utilizadores dares permissões em tables, procedimentos, etc. a roles (papéis) e atribuir roles aos utilizadores.
Os utilizadores com um dado role terão as permissões dadas a esse role.
Isso funciona muito bem em SQL mas um problema acontece quanto tentamos usar isso em procedimentos, funções e pacotes (stored procedures, functions, and packages) !
Descobrimos que a compilação falha dizendo que temos permissões!
Segundo o modelo da Oracle as permissões dos roles somente são válidas para SQL e não para os stored procedures, etc.. O que acontece é que o próprio Oracle desactiva tais permissões via roles na compilação. Assim o utilizador não tem acesso a nenhum objecto externo ao seu schema não não tenha sido dado especificamente ao utilizador (e não via role).
Isso é efectuado segundo a Oracle por razões de performance e de segurança (penso que tem haver com a possibilidade de activar/desactivar um role (usando SET ROLE) e que originaria a verificação constante de tais permissões). Acho que no entanto isso muito chato :-(.
Uma utilização normal do Oracle Text (CTXSYS) num procedimento verifica logo este problema.
Resumindo: para utilizar um dado objecto num procedimento, função é necessário que tenha sido dada explicitamente ao utilizador essa permissão (não via role).
Quase de certeza estão agora a pensar no caso do PUBLIC.
Pois bem , o PUBLIC não é um role mas sim um conjunto de utilizadores pelo que as permissões dadas ao PUBLIC são utilizáveis nos procedimentos. (Acho que a razão para desta distinção vem também de não ser possivel desativar este "role").
Quem não sabia ficou a saber ....:-)
No comments:
Post a Comment
Os comentários são moderados.
The comments are moderated.