Estou tentando entender as permissões do pacote no Oracle.
Se o usuário A recebe EXECUTE em um pacote de propriedade/criado pelo usuário B, e esse pacote faz várias inserções e atualizações em uma tabela de propriedade do usuário B, o usuário A também requer permissões explícitas nos objetos subjacentes?
Ou o privilégio EXECUTE concedido no pacote de propriedade do usuário B significa que o usuário A pode fazer tudo sem exigir permissões na tabela de propriedade do usuário B?
sim e não
A
EXECUTE
permissão apenas concede ao Usuário A a capacidade de chamar (executar) o pacote. Não tem nada a ver com as permissões dos objetos subjacentes.Quais permissões o usuário A precisa depende do valor da
AUTHID
linha do pacote compilado (e se o CBAC estiver em vigor).Direitos do Definidor
Esses Pacotes são aqueles cuja linha de autorização é
AUTHID DEFINER
(padrão)O código só tem os privilégios do Definidor (usuário B)
O usuário A não precisa dos privilégios subjacentes.
Direitos do Invocador
Estes são pacotes/procedimentos/funções cuja linha de autorização é
AUTHID CURRENT_USER
O código tem apenas os privilégios do Invoker (usuário A).
O usuário A precisará de permissões subjacentes.
CBAC
CBAC === Controle de Acesso Baseado em Código
O CBAC geralmente é usado em conjunto com o código de Direitos do Invoker para aumentar a segurança.
O Oracle 12c introduziu a capacidade de conceder uma função a um pacote.
No CBAC, o usuário tem (temporariamente) os privilégios que foram concedidos ao pacote por meio de uma função.
O código tem apenas os privilégios da Função concedida.
O usuário A não precisa dos privilégios subjacentes se e somente se os privilégios apropriados foram concedidos ao pacote que está sendo chamado.
Isso permite que o desenvolvedor (temporariamente) conceda apenas as permissões necessárias para executar o código ao usuário que o chama.
Você pode ler mais sobre o CBAC aqui
Nota
Isso se aplica a Pacotes e Funções autônomas e Procedimentos autônomos