superuser postgres create convert change postgresql roles postgresql-9.2 privileges

convert - postgresql create admin user



Modificar los privilegios predeterminados para un rol de grupo en PostgreSQL (1)

Si un usuario crea una tabla, este usuario se convierte en el propietario de la tabla. Entonces, en su caso, se aplican todos los privilegios predeterminados para userX, no los de los administradores. La solución es establecer los SET ROLE admins antes de crear su tabla:

SET ROLE admins; CREATE TABLE ... -- This now applies default privileges of admins ; RESET ROLE;

Más en general, desearía hacer esto siempre: cree todas las tablas y vistas a través de un rol de grupo o algún otro rol que no se use en las operaciones diarias y otorgue acceso a las relaciones a otro rol de grupo cuyos privilegios sean heredados por los roles de inicio de sesión regulares (usuarios ). Esto facilita enormemente la gestión de la seguridad.

Saludos Patrick

He creado dos roles de grupo en Postgres 9.2: uno se llama admins y el otro se llama readers .

La idea es muy simple: los admins crean tablas y los readers tienen acceso de lectura a estas tablas.

Después de otorgar privilegios a ambos roles de grupo, todo funcionó como se esperaba para los objetos exisintg. Pero ahora ¿qué pasa con los nuevos objetos?

Entonces, después de leer esta post , modifiqué los privilegios predeterminados para otorgar privilegios SELECT a los readers para cualquier nueva tabla que los admins creen:

ALTER DEFAULT PRIVILEGES FOR ROLE admins IN SCHEMA public GRANT SELECT ON TABLES TO readers; ALTER DEFAULT PRIVILEGES FOR ROLE admins IN SCHEMA public GRANT SELECT ON SEQUENCES TO readers;

Pero, aparentemente, ALTER DEFAULT PRIVILEGES solo afecta al rol en sí mismo, pero no a los miembros del rol. Deja que te enseñe.

Si inicio sesión como userX (un miembro de admins ) y creo una nueva tabla, no se otorgan privilegios predeterminados (y, por lo tanto, los readers no pueden acceder a esta tabla):

test=# CREATE TABLE table1 (name VARCHAR(10)); -- Creating table as userX test=# /dp table1 Access privileges Schema | Name | Type | Access privileges | Column access privileges --------+--------+-------+-------------------+-------------------------- public | table1 | table | |

Sin embargo, los privilegios predeterminados se otorgan si creo la tabla como admins (los readers pueden acceder a esta tabla):

test=# SET ROLE admins; test=# CREATE TABLE table2 (name VARCHAR(10)); -- Creating table as admins test=# /dp table2 Access privileges Schema | Name | Type | Access privileges | Column access privileges --------+--------+-------+-----------------------+-------------------------- public | table2 | table | readers=r/admins +| | | | admins=arwdDxt/admins |

¿Hay alguna forma de alterar los privilegios predeterminados para TODOS los miembros de un rol de grupo? ¿O debería simplemente alterar los privilegios predeterminados para cada usuario?

ACTUALIZACIÓN: En este foro de PostgreSQL alguien hizo una pregunta muy similar y la respuesta fue:

Desafortunadamente, no puedo ver la manera de lograr lo que desea sin otorgar privilegios predeterminados a todos los involucrados.

Sin embargo esta pregunta fue formulada hace 2 años. ¿Hay una solución ahora?