PostgreSQL - ¿Quién o qué es el rol "PÚBLICO"?

11

Estaba mirando information_schema.role_table_grantscuando vi publicen la granteecolumna, luego revisé information_schema.enabled_rolespero esto role_nameno existe.

=> ¿Quién o cuál es el publicpapel?

Gugelhupf
fuente

Respuestas:

9

Desde el manual:

La palabra clave PUBLIC indica que los privilegios se otorgarán a todos los roles, incluidos los que se puedan crear más adelante. PUBLIC puede considerarse como un grupo definido implícitamente que siempre incluye todos los roles. Cualquier rol en particular tendrá la suma de privilegios otorgados directamente, privilegios otorgados a cualquier rol del que actualmente sea miembro y privilegios otorgados a PUBLIC.

un caballo sin nombre
fuente
7

Si bien esto es cierto, no es la imagen completa. Público también actúa como un rol implícito al que pertenecen otros roles y que tiene sus propios permisos que no siempre se reflejan e informan que se heredan.

Por defecto, da permiso de creación en el esquema público. cuando no elimina esto, todos los demás pasos correctos para crear un usuario de solo lectura dan como resultado que ese usuario también pueda crear nuevos objetos en el esquema público y luego, debido a la propiedad, coloque datos en ellos. Para prevenir esto

REVOKE ALL ON SCHEMA public FROM PUBLIC;

Del mismo modo, también da permiso a nivel de base de datos, para eliminar el uso

REVOKE ALL ON DATABASE all_database FROM PUBLIC;

Buen artículo aquí: https://wiki.postgresql.org/images/d/d1/Managing_rights_in_postgresql.pdf

Ruan Malan N
fuente