当一个数据库对象(如表、视图、序列)被创建时,创建它的角色自动成为其所有者(owner)。在默认权限模型下,只有对象所有者与数据库超级用户才拥有对该对象的完全访问控制权。其他普通角色若需操作该对象,必须被显式授予相应的访问权限。
数据表级别的基础权限包括:
Table 5.1. 权限概要表
| 权限类型 | 适用对象 | 说明 |
|---|---|---|
SELECT | 表、视图、列 | 允许读取数据 |
INSERT | 表、列 | 允许写入新行 |
UPDATE | 表、列 | 允许修改存量行 |
DELETE | 表 | 允许删除行 |
TRUNCATE | 表 | 允许快速截断清空表 |
Table 5.2. 权限缩写代码对照表
| 缩写字母 | 对应权限 |
|---|---|
| r | SELECT |
| a | INSERT (append) |
| w | UPDATE (write) |
| d | DELETE |
| D | TRUNCATE |
| x | REFERENCES |
| t | TRIGGER |
| X | EXECUTE |
| U | USAGE |
| C | CREATE |
| c | CONNECT |
| T | TEMPORARY |
| m | MAINTAIN |
SELECT #允许读取数据。
INSERT #允许插入新行。
UPDATE #允许更新数据行。
DELETE #允许删除数据行。
TRUNCATE #允许截断表。
REFERENCES #允许创建外键约束引用。
TRIGGER #允许在表上创建触发器。
CREATE #允许在模式或数据库中新建对象。
CONNECT #允许连接目标数据库。
TEMPORARY #允许创建临时表。
EXECUTE #允许执行函数或过程。
USAGE #允许在模式中查找对象或使用序列。
SET #允许设置配置参数。
ALTER SYSTEM #允许通过 ALTER SYSTEM 修改全局配置。
MAINTAIN #允许执行 VACUUM、ANALYZE、REINDEX 等维护操作。
在对象创建时,PostgreSQL 默认会将部分类型对象的权限授予 PUBLIC。
使用 GRANT 命令授予权限:
GRANT SELECT ON mytable TO joe; GRANT ALL ON mytable TO admin_group;
使用 REVOKE 命令撤销权限:
REVOKE ALL ON mytable FROM public;
其中特殊的虚拟角色 PUBLIC 代表系统中的全部用户。