Solución:
Solución 1:
Las respuestas a sus preguntas provienen de los documentos en línea de PostgreSQL 8.4.
-
GRANT ALL PRIVILEGES ON DATABASE
concede elCREATE
,CONNECT
, yTEMPORARY
privilegios en una base de datos a un rol (los usuarios se denominan correctamente roles). Ninguno de esos privilegios permite que un rol lea datos de una tabla;SELECT
Se requiere privilegio sobre la mesa para eso. -
No estoy seguro de que haya una forma “adecuada” de otorgar todos los privilegios en todas las tablas a un rol. La mejor manera de garantizar que un rol determinado tenga todos los privilegios en una mesa es asegurarse de que el rol posee la mesa. De forma predeterminada, cada objeto recién creado pertenece al rol que lo creó, por lo que si desea que un rol tenga todos los privilegios en una tabla, use ese rol para crearlo.
PostgreSQL 9.0 introduce la siguiente sintaxis que es casi Lo que quieras:
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO new_user;
El problema es que si crea tablas en esquemas fuera del esquema “público” predeterminado, esto
GRANT
no se aplicará a ellos. Si usa esquemas no públicos, tendrá queGRANT
los privilegios de esos esquemas por separado.
Solución 2:
Es posible configurar varios inicios de sesión para actuar como propietario de la base de datos:
- Cree un rol “nologin” para actuar como propietario:
create role dbowner nologin
- Cambie el propietario de su base de datos a esto:
alter database mydb owner dbowner
- Otorgue todos sus inicios de sesión a este nuevo rol:
grant dbowner to user1, user2
Ahora, si el usuario1 o el usuario2 inician sesión, tienen todos los permisos en “mydb” sin que se requieran más concesiones.
Sin embargo, consideraría esta solución detenidamente. Es tentador que su aplicación web use uno de estos inicios de sesión para evitar el dolor de crear subvenciones adicionales cada vez que se actualiza el esquema, pero de esta manera está eliminando una forma de protección muy útil. Utilice la solución anterior si realmente desea varios “administradores”, pero siga con el patrón “conceder todos los privilegios en todas las tablas en el esquema …” anterior para el inicio de sesión para su aplicación de “uso normal”.