PostgreSQL角色继承不起作用?

17

我在PostgreSQL中遇到了一个非常恼人的角色继承问题。根据文档,它根本没有按照应有的方式运行。

我希望拥有一个主角色,并授予新创建的用户其权限。这些用户应该自动继承权限,而不需要手动发出SET ROLE命令。

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

现在当我以testuser身份连接后,我得到以下结果:

postgres=> CREATE DATABASE foobar;
ERROR:  permission denied to create database
postgres=> SET ROLE testrole;
SET
postgres=> CREATE DATABASE foobar;
CREATE DATABASE
根据上面链接中的文档(由于使用了INHERIT选项),SET ROLE应该不是必需的。我在这里错过了什么?

1
一些权限不会自动继承,包括:LOGIN、SUPERUSER、CREATEDB 和 CREATEROLE。https://www.postgresql.org/docs/current/role-membership.html - osmanhomek
1个回答

32

在同一页的稍后位置:

“角色属性LOGIN、SUPERUSER、CREATEDB和CREATEROLE可以被视为特殊权限,但它们从不像普通权限那样在数据库对象上继承。您必须实际上SET ROLE到一个具有这些属性之一的特定角色,才能利用该属性。”


3
哇,这很反直觉。 - Pablo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接