无论何时创建数据库对象,都会为其分配一个所有者,所有者通常是执行 create 语句的人。
对于大多数类型的对象,初始状态是只有所有者(或超级用户)才能修改或删除对象。要允许其他角色或用户使用它,必须为该用户设置权限。
在 PostgreSQL 中,权限分为以下几种:
根据对象的类型(表、函数等),将指定权限应用于该对象。
要向用户分配权限,可以使用 GRANT 命令。
[postgres-13@yz219 ~]$ psql test test=# SELECT * FROM pg_user; usename | usesysid | usecreatedb | usesuper | userepl | usebypassrls | passwd | valuntil | useconfig -------------+----------+-------------+----------+---------+--------------+----------+----------+------------------------------------ postgres-13 | 10 | t | t | t | t | ******** | | (1 ROWS) test=# CREATE USER yz; CREATE ROLE test=# SELECT * FROM pg_user; usename | usesysid | usecreatedb | usesuper | userepl | usebypassrls | passwd | valuntil | useconfig -------------+----------+-------------+----------+---------+--------------+----------+----------+------------------------------------ postgres-13 | 10 | t | t | t | t | ******** | | yz | 24643 | f | f | f | f | ******** | | (2 ROWS) [postgres-13@yz219 ~]$ psql test -U yz psql (13.2) TYPE "help" FOR help. test=> CREATE TABLE t(a INT); test=> \q [postgres-13@yz219 ~]$ psql test test=# REVOKE SELECT ON t FROM yz; REVOKE
注:如果用户名有特殊字符,例如“yz-13”,SQL需要使用双引号。
例如:
test-# REVOKE SELECT ON t FROM yz-13; -- 错误 ERROR: syntax error at OR near "revoke" LINE 2: REVOKE SELECT ON t FROM yz-13; ^ test-# REVOKE SELECT ON t FROM "yz-13"; -- 正确