# PostgreSQL PRIVILEGES(权限) 无论何时创建数据库对象,都会为其分配一个所有者,所有者通常是执行 create 语句的人。 对于大多数类型的对象,初始状态是只有所有者(或超级用户)才能修改或删除对象。要允许其他角色或用户使用它,必须为该用户设置权限。 在 PostgreSQL 中,权限分为以下几种: - SELECT - INSERT - UPDATE - DELETE - TRUNCATE - REFERENCES - TRIGGER - CREATE - CONNECT - TEMPORARY - EXECUTE - USAGE 根据对象的类型(表、函数等),将指定权限应用于该对象。 要向用户分配权限,可以使用 GRANT 命令。 # 实例 ```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需要使用双引号。 例如: ```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"; -- 正确 ``` # 参考 - [PostgreSQL PRIVILEGES(权限)](https://www.runoob.com/postgresql/postgresql-privileges.html)