¿Cómo otorgar privilegios de tabla / función de caída a un rol en PostgreSQL?

10

Quiero otorgar dropprivilegios en todas las tablas y funciones (no solo en las propiedad del usuario) en cierto esquema de una base de datos específica para un rol específico. Sin embargo, GRANT ALL PRIVILEGESno es suficiente y no encontré cómo hacerlo sin convertir el rol en superusuario: el superusuario tiene derechos sobre otras bases de datos en el mismo servidor, que no es lo que quiero. No me importarían los privilegios de superusuario limitados a una base de datos específica, pero no estoy seguro de cómo hacerlo.

Mi código:

CREATE USER _administrator PASSWORD 'pwd12345';
CREATE ROLE administrator NOLOGIN ADMIN _administrator;

GRANT ALL PRIVILEGES ON DATABASE "myDB" TO administrator;
GRANT ALL PRIVILEGES ON SCHEMA public TO administrator;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO administrator;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO administrator;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO administrator;

administratores el grupo de myDBadministradores de bases de datos, _administratores la función más poderosa con la que mi aplicación cliente podrá iniciar sesión.

¿Qué extrañé o hice mal?

Pavel V.
fuente

Respuestas:

11

Solo el propietario (y los superusuarios) pueden soltar objetos. Por documentación:

El derecho a soltar un objeto, o alterar su definición de alguna manera, no se trata como un privilegio otorgable; es inherente al propietario y no puede otorgarse ni revocarse. (Sin embargo, se puede obtener un efecto similar al otorgar o revocar la membresía en el rol que posee el objeto; ver más abajo). El propietario también tiene implícitamente todas las opciones de concesión para el objeto.

Por lo tanto, haga sus administrator propios objetos que los usuarios puedan soltar.

ALTER FUNCTION foo() OWNER TO administrator;
ALTER TABLE foo      OWNER TO administrator;

Y te acordaste de otorgar membresía de grupo, ¿verdad?

GRANT administrator TO _administrator;
Erwin Brandstetter
fuente