我遇到了一个非常烦人的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
。
我在这里缺少什么?
答案 0 :(得分:23)
在同一页面上更进一步:
“角色属性LOGIN,SUPERUSER,CREATEDB和CREATEROLE可以被视为特殊权限,但它们永远不会作为数据库对象的普通权限继承。您必须实际将SET ROLE设置为具有这些属性之一的特定角色为了使用属性。“