2010-01-26 3 views
9

J'ai rencontré un problème d'héritage très gênant avec PostgreSQL. Il ne se comporte tout simplement pas comme il le devrait selon le documentation.L'héritage de rôle PostgreSQL ne fonctionne pas?

Je voudrais avoir un rôle de maître et accorder ses autorisations aux utilisateurs nouvellement créés. Ces utilisateurs doivent hériter des autorisations sans émettre manuellement SET ROLE.

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

Maintenant, après que je connecter en tant que testuser, je reçois le texte suivant:

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

Selon les documents liés ci-dessus (en raison de l'option HERITER), le SET ROLE ne devrait pas être nécessaire.

Qu'est-ce qui me manque ici?

Répondre

18

Un peu plus bas sur la même page:

« Le rôle des attributs LOGIN, SUPERUSER, CREATEDB et CREATEROLE peut être considéré comme des privilèges spéciaux, mais ils ne sont jamais hérité des privilèges ordinaires sur les objets de base de données vous. doit en fait SET ROLE à un rôle spécifique ayant l'un de ces attributs afin d'utiliser l'attribut. "