PostgreSQL PRIVILEGES(权限)

无论何时创建数据库对象,都会为其分配一个所有者,所有者通常是执行 create 语句的人。

对于大多数类型的对象,初始状态是只有所有者(或超级用户)才能修改或删除对象。要允许其他角色或用户使用它,必须为该用户设置权限。

在 PostgreSQL 中,权限分为以下几种:

根据对象的类型(表、函数等),将指定权限应用于该对象。

要向用户分配权限,可以使用 GRANT 命令。

实例

snippet.sql
[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需要使用双引号。

例如:

snippet.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"; -- 正确

参考