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?