PostgreSQL 权限管理(一):角色、用户与权限体系总览
一、为什么 PostgreSQL 权限容易混乱 很多人刚接触 PostgreSQL 权限时,会下意识拿 MySQL 来类比: 1 2 MySQL:用户 + 数据库 + 表权限 PostgreSQL:角色 + 数据库 + schema + 对象权限 + 默认权限 + RLS PostgreSQL 的权限体系更细,灵活性也更高,但如果没有先建立层级概念,就很容易出现下面这些问题: 用户明明有表的 SELECT 权限,却仍然提示 permission denied for schema 创建了只读用户,但用户还能在 public schema 里建表 给了 GRANT SELECT ON ALL TABLES,新建表却无法查询 不知道 CREATE USER 和 CREATE ROLE 到底有什么区别 不知道 public schema 和 PUBLIC 角色是不是同一个东西 删除用户时提示仍然有对象依赖,无法 DROP ROLE 要理解这些问题,必须先把 PostgreSQL 的权限模型分层看清楚。 二、PostgreSQL 的对象层级 PostgreSQL 常见层级如下: 1 2 3 4 5 6 7 8 PostgreSQL 实例 └── database └── schema ├── table ├── view ├── sequence ├── function └── type 一个 PostgreSQL 实例里可以有多个数据库。每个数据库内部又可以有多个 schema。表、视图、序列、函数等对象通常位于某个 schema 下面。 ...