我试图在Postgres中设置RBAC,在这里我有一个数据库和一个模式。我有几个角色provisioner
、service
、mydb_ro
和mydb_rw
。我运行了以下命令来更改默认权限
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;
这就是我在默认权限中看到的。
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
角色的用户无法看到它。我做错了什么?
我现在跑
GRANT mydb_ro TO mydb_rw;
GRANT mydb_rw TO service;
但这并不能解决许可问题。
发布于 2020-08-27 13:59:04
拥有“供给者”的角色与成为“供给者”并不是一回事。
对于所示的默认应用权限,必须将对象创建为“provisioner”(例如,在创建对象之前使用SET ROLE provisioner;
)。
https://dba.stackexchange.com/questions/274404
复制相似问题