PostgreSQL ACL权限
Pigsty的默认权限模型与默认角色紧密关联。使用Pigsty访问控制模型时,新创建的业务用户都应当属于四种默认角色之一,默认角色拥有的权限如下所示:
- 所有用户都可以访问所有模式
- 只读用户可以读取所有表
- 管理员可以执行DDL变更操作(CREATE, USAGE, TRUNCATE, REFERENCES, TRIGGER)
- 离线用户与只读用户类似,但只允许访问 或
pg_offline_query = true
的实例
数据库对象的默认访问权限通过PostgreSQL的ALTER DEFAULT PRIVILEGES
确保。
所有由 {{ dbsu }}
, {{ pg_admin_username }}
, {{ dbrole_admin }}
创建的对象,都会拥有以上默认权限。 反过来说,如果是由其他角色创建的对象,则并不会配置有正确的默认访问权限。
这样创建的对象才会具有默认的访问权限。
数据库有三种权限:, CREATE
, TEMP
,以及特殊的属主OWNERSHIP
。数据库的定义由参数pg_database
控制。一个完整的数据库定义如下所示:
默认情况下,如果数据库没有配置属主,那么数据库超级用户dbsu
将会作为数据库的默认OWNER
,否则将为指定用户。
如果希望实现不同数据库之间的访问隔离,可以为每一个数据库创建一个相应的业务用户作为owner
,并全部设置revokeconn
选项,这种配置对于多租户实例尤为实用。
一个进行权限隔离的数据库样例
默认情况下,出于安全考虑,Pigsty会撤销PUBLIC
用户在数据库下CREATE
新模式的权限, 同时也会撤销PUBLIC
用户在public
模式下创建新关系的权限。 数据库超级用户与管理员不受此限制,他们总是可以在任何地方执行DDL变更。