PostgreSQL角色继承不起作用?

时间:2010-01-26 11:25:32

标签: postgresql

我遇到了一个非常烦人的PostgreSQL角色继承问题。根据{{​​3}},它根本不会表现出来。

我想拥有一个主角色,并将其权限授予新创建的用户。这些用户应该继承权限,而无需手动发出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 个答案:

答案 0 :(得分:23)

在同一页面上更进一步:

“角色属性LOGIN,SUPERUSER,CREATEDB和CREATEROLE可以被视为特殊权限,但它们永远不会作为数据库对象的普通权限继承。您必须实际将SET ROLE设置为具有这些属性之一的特定角色为了使用属性。“