权限(privileges)是决定用户或角色可以对数据库对象(如表、视图、序列和函数)执行哪些操作的许可。权限对于维护安全性和控制对数据的访问至关重要。
权限分类
在 PostgreSQL 中,权限分为以下几种:
-
SELECT:允许从表或视图中读取数据。
-
INSERT:允许向表中插入新数据。
-
UPDATE:允许更新表中的数据。
-
DELETE:允许从表中删除数据。
-
TRUNCATE:允许截断表,即删除表中的所有数据。
-
REFERENCES:允许创建外键约束,引用其他表。
-
TRIGGER:允许在表上创建触发器。
-
CREATE:允许在数据库或模式中创建新对象。
-
CONNECT:允许连接到数据库。
-
TEMPORARY:允许在数据库中创建临时表。
-
EXECUTE:允许执行函数或存储过程。
授予和撤销权限
使用 GRANT
和 REVOKE
语句来授予和撤销权限。
授予权限
GRANT privilege_list ON object_name TO { role_name | PUBLIC | CURRENT_USER | SESSION_USER };
GRANT SELECT, INSERT ON my_table TO my_user;
撤销权限
REVOKE privilege_list ON object_name FROM { role_name | PUBLIC | CURRENT_USER | SESSION_USER };
REVOKE INSERT ON my_table FROM my_user;
查看权限
使用 \dp
或 \z
命令在 psql 中查看对象的权限,或者使用 psql
的 \dp
命令。
\dp employees
默认权限
PostgreSQL 还允许你设置默认权限(default privileges),这样在创建新对象时会自动应用这些权限。
设置默认权限,使得所有新创建的表都自动授予 dba_user
读取权限:
ALTER DEFAULT PRIVILEGES FOR ROLE my_role GRANT SELECT ON TABLES TO dba_user;