Estoy tratando de otorgar todos los privilegios en todas las tablas de una base de datos dada a un nuevo usuario de postgres (no el propietario). Parece que eso GRANT ALL PRIVILEGES ON DATABASE my_db TO new_user;
no hace eso. Después de ejecutar dicho comando correctamente (como usuario de postgres), obtengo lo siguiente como new_user:
$ psql -d my_db
my_db => SELECT * FROM a_table_in_my_db;
ERROR: permission denied for relation a_table_in_my_db
Dos preguntas:
1) ¿Qué hace el comando anterior, si no otorga todos los permisos en todas las tablas en my_db?
2) ¿Cuál es la forma correcta de otorgar todos los permisos en todas las tablas a un usuario? (incluso en todas las tablas creadas en el futuro)
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO your_user;
o no puedes insertar ningún registro.Es posible configurar múltiples inicios de sesión para actuar como propietario de la base de datos:
create role dbowner nologin
alter database mydb owner dbowner
grant dbowner to user1, user2
Ahora, si el usuario1 o el usuario2 inician sesión, tienen todos los permisos en "mydb" sin necesidad de ninguna otra concesión.
Sin embargo, consideraría esta solución con cuidado. Es tentador que su aplicación web use uno de estos inicios de sesión para evitar la molestia de crear subvenciones adicionales cada vez que se actualiza el esquema, pero está eliminando una forma muy útil de protección de esta manera. Utilice la solución anterior si realmente desea múltiples "administradores", pero siga con el patrón "conceder todos los privilegios en todas las tablas en el esquema ..." anterior para iniciar sesión en su aplicación de "uso normal".
fuente