PostgreSQL - Quem ou o que é o papel “PÚBLICO”?

11

Eu estava olhando information_schema.role_table_grantsquando vi publicna granteecoluna, depois verifiquei em information_schema.enabled_rolesmas isso role_namenão existe.

=> Quem ou qual é o publicpapel?

Gugelhupf
fonte

Respostas:

9

Diretamente do manual:

A palavra-chave PUBLIC indica que os privilégios devem ser concedidos a todas as funções, incluindo aquelas que podem ser criadas posteriormente. PUBLIC pode ser pensado como um grupo implicitamente definido que sempre inclui todas as funções. Qualquer função em particular terá a soma dos privilégios concedidos diretamente a ela, privilégios concedidos a qualquer função da qual atualmente seja membro e privilégios concedidos à PUBLIC.

um cavalo sem nome
fonte
7

Embora isso seja verdade, não é o quadro completo. O público também atua como uma função implícita à qual outras funções pertencem e que tem suas próprias permissões nem sempre refletidas e relatadas que são herdadas.

Por padrão, ele fornece permissão de criação no esquema público. quando você não remove isso, todas as outras etapas corretas para criar um usuário somente leitura resultam em que o usuário também pode criar novos objetos no esquema público e, devido à propriedade, colocar dados neles. Para evitar isso

REVOKE ALL ON SCHEMA public FROM PUBLIC;

Da mesma forma, também fornece permissão no nível do banco de dados, para remover o uso

REVOKE ALL ON DATABASE all_database FROM PUBLIC;

Bom artigo aqui: https://wiki.postgresql.org/images/d/d1/Managing_rights_in_postgresql.pdf

Ruan Malan N
fonte