2010-01-26 18 views
9

Me encontré con un problema de herencia de roles muy molesto con PostgreSQL. Simplemente no se comporta como debería según el documentation.¿La herencia de funciones de PostgreSQL no funciona?

Me gustaría tener un rol maestro y otorgar sus permisos a los usuarios recién creados. Estos usuarios deben heredar los permisos sin emitir SET ROLE manualmente.

CREATE ROLE testrole NOSUPERUSER INHERIT CREATEDB NOCREATEROLE; 
CREATE ROLE testuser LOGIN NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE; 
GRANT testrole TO testuser; 

Ahora, después de lo conecto como testuser, me sale el siguiente:

postgres=> CREATE DATABASE foobar; 
ERROR: permission denied to create database 
postgres=> SET ROLE testrole; 
SET 
postgres=> CREATE DATABASE foobar; 
CREATE DATABASE 

De acuerdo con los documentos relacionados anteriormente (debido a la opción INHERIT), el SET ROLE no debería ser necesaria.

¿Qué me falta aquí?

Respuesta

18

Un poco más abajo en la misma página:

"Los atributos de la función LOGIN, SUPERUSUARIO, CREATEDB y CREATEROLE puede pensarse privilegios especiales, pero nunca se hereda como privilegios ordinarios en objetos de base de estas. debe establecer SET ROLE en un rol específico que tenga uno de estos atributos para poder usar el atributo ".

Cuestiones relacionadas