O catálogo pg_init_privs registra
informações sobre os privilégios iniciais dos objetos no sistema.
Há uma entrada para cada objeto no banco de dados que possui um
conjunto inicial de privilégios não padrão (não NULL).
Os objetos podem ter privilégios iniciais tendo estes privilégios
definidos quando o sistema é inicializado
(pelo initdb), ou quando o objeto é
criado durante CREATE EXTENSION e o script
da extensão define privilégios iniciais usando o comando
GRANT.
Note que o sistema trata automaticamente da aplicação dos
privilégios durante o script de extensão, e que os autores da
extensão precisam apenas usar as instruções GRANT
e REVOKE em seu script para ter os privilégios
registrados.
A coluna privtype indica se o privilégio inicial
foi definido pelo initdb, ou durante um
comando CREATE EXTENSION.
Os objetos que possuem privilégios iniciais definidos pelo
initdb têm entradas onde
privtype é 'i',
enquanto os objetos que possuem privilégios iniciais definidos por
CREATE EXTENSION têm entradas onde
privtype é 'e'.
Tabela 52.28. Colunas de pg_init_privs
Coluna Tipo de dados Descrição |
|---|
OID do objeto específico |
OID do catálogo do sistema em que o objeto se encontra |
Para uma coluna de tabela, este é o número da coluna
(o |
O código que define o tipo de privilégio inicial desse objeto; veja o texto |
Os privilégios de acesso iniciais; veja Privilégios para obter detalhes |
Exemplo 52.19. Exemplo do tradutor
Privilégios iniciais
Uso do catálogo pg_init_privs para mostrar os privilégios iniciais alterados.
postgres=# GRANT EXECUTE ON FUNCTION pg_catalog.pg_switch_wal() TO ana;
GRANT
postgres=# SELECT
postgres-# p.proname AS function_name,
postgres-# i.initprivs AS original_privileges,
postgres-# p.proacl AS current_privileges
postgres-# FROM pg_init_privs i
postgres-# JOIN pg_proc p ON i.objoid = p.oid
postgres-# WHERE i.initprivs IS DISTINCT FROM p.proacl\gx
-[ RECORD 1 ]-------+-------------------------------------
function_name | pg_switch_wal
original_privileges | {postgres=X/postgres}
current_privileges | {postgres=X/postgres,ana=X/postgres}