首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Postgres默认特权似乎不起作用。

Postgres默认特权似乎不起作用。
EN

Database Administration用户
提问于 2020-08-26 14:13:10
回答 1查看 628关注 0票数 0

我试图在Postgres中设置RBAC,在这里我有一个数据库和一个模式。我有几个角色provisionerservicemydb_romydb_rw。我运行了以下命令来更改默认权限

代码语言:javascript
运行
复制
ALTER DEFAULT PRIVILEGES FOR ROLE provisioner IN SCHEMA mydb_schema
    GRANT SELECT                           ON TABLES TO mydb_ro;  -- only read

ALTER DEFAULT PRIVILEGES FOR ROLE provisioner IN SCHEMA mydb_schema
    GRANT INSERT, UPDATE, DELETE, TRUNCATE ON TABLES TO mydb_rw;  -- + write, TRUNCATE optional

ALTER DEFAULT PRIVILEGES FOR ROLE provisioner IN SCHEMA mydb_schema
    GRANT REFERENCES, TRIGGER              ON TABLES TO mydb_rw;  -- + TRIGGER

ALTER DEFAULT PRIVILEGES FOR ROLE provisioner IN SCHEMA mydb_schema
    GRANT USAGE, SELECT, UPDATE            ON SEQUENCES TO mydb_rw;  -- SELECT, UPDATE are optional

ALTER DEFAULT PRIVILEGES FOR ROLE provisioner IN SCHEMA mydb_schema
    GRANT EXECUTE                          ON FUNCTIONS TO mydb_rw;

这就是我在默认权限中看到的。

代码语言:javascript
运行
复制
postgres@mydb=> \ddp
                           Default access privileges
┌─────────────┬──────────────────┬──────────┬─────────────────────────────────┐
│    Owner    │      Schema      │   Type   │        Access privileges        │
├─────────────┼──────────────────┼──────────┼─────────────────────────────────┤
│ provisioner │ mydb_schema      │ function │ mydb_rw=X/provisioner           │
│ provisioner │ mydb_schema      │ sequence │ mydb_rw=rwU/provisioner         │
│ provisioner │ mydb_schema      │ table    │ mydb_ro=r/provisioner          ↵│
│             │                  │          │ mydb_rw=awdDxt/provisioner      │
└─────────────┴──────────────────┴──────────┴─────────────────────────────────┘

但是,当我以具有provisioner角色的用户身份登录并创建一个表时,具有service角色的用户无法看到它。我做错了什么?

我现在跑

代码语言:javascript
运行
复制
GRANT mydb_ro TO mydb_rw;
GRANT mydb_rw TO service;

但这并不能解决许可问题。

EN

回答 1

Database Administration用户

回答已采纳

发布于 2020-08-27 13:59:04

拥有“供给者”的角色与成为“供给者”并不是一回事。

对于所示的默认应用权限,必须将对象创建为“provisioner”(例如,在创建对象之前使用SET ROLE provisioner; )。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/274404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档