Postgres将用户加入对象所属角色未继承权限是否为预期行为
问题解答
结论
该报错属于Postgres的默认预期行为,你的操作逻辑存在错误。
错误原因
你对Postgres角色继承的GRANT语法方向理解完全颠倒:
Postgres中GRANT <角色A> TO <角色B>的含义是角色B成为角色A的成员,角色B可以继承角色A的全部权限。你执行的GRANT "user2" TO "user1"实际是让user1继承user2的权限,和你想要实现的「user2继承user1权限」需求完全相反。
正确操作
如果要让user2继承user1对自身所有对象的权限,替换原授权语句为以下内容即可:
GRANT "user1" TO "user2";
执行完成后user2登录即可正常查询test01表。
补充说明
Postgres默认创建的角色都会开启INHERIT属性,只有开启该属性的角色才会自动继承所属角色的权限,你可以通过以下命令确认属性状态:
SELECT rolname, rolinherit FROM pg_roles WHERE rolname IN ('user1', 'user2');
如果返回结果中rolinherit字段值为t则代表继承属性正常开启,如果为f可通过以下命令修改:
ALTER ROLE "user2" SET INHERIT TRUE;
内容的提问来源于stack exchange,提问作者red888
相关产品推荐
相关产品推荐

