Postgres撤销用户的数据库访问权限

时间:2018-03-10 07:55:25

标签: postgresql

当我尝试

REVOKE ALL PRIVILEGES ON DATABASE postgres from admin; 

但之后,用户admin仍然可以通过postgres远程连接到pgadmin

如何完全撤消用户对数据库的访问权限?

/root$ psql -U postgres
psql (9.2.24)
Type "help" for help.

postgres=# \du
                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 admin     | No inheritance                                 | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}

postgres=# REVOKE ALL PRIVILEGES ON DATABASE postgres from admin; 
REVOKE
postgres=# SELECT * FROM pg_stat_activity;
 datid | datname  |  pid   | usesysid | usename  | application_name | client_addr | client_hostname | client_port |         backend_start         |          xact_start           |
          query_start          |         state_change          | waiting | state  |              query              
-------+----------+--------+----------+----------+------------------+-------------+-----------------+-------------+-------------------------------+-------------------------------+
-------------------------------+-------------------------------+---------+--------+---------------------------------
 12924 | postgres | 121487 |       10 | postgres | psql             |             |                 |          -1 | 2018-03-10 20:20:42.458031+08 | 2018-03-10 20:21:27.367078+08 |
 2018-03-10 20:21:27.367078+08 | 2018-03-10 20:21:27.367082+08 | f       | active | SELECT * FROM pg_stat_activity;
(1 row)

postgres=# \q
/root$ psql -U admin postgres
psql (9.2.24)
Type "help" for help.

postgres=>

enter image description here

2 个答案:

答案 0 :(得分:3)

你可能还需要做一个

REVOKE CONNECT ON DATABASE postgres FROM PUBLIC; 

每个角色都是PUBLIC的隐式成员。

答案 1 :(得分:0)

您的管理员用户可能已分配SUPERUSER个角色。所以你必须用

删除这个角色
ALTER ROLE admin NOSUPERUSER;

但是你应该确保你的Postgres DBMS中还有另一个超级用户。

注意:该角色对所有数据库都是全局的。因此,您无法仅为一个数据库删除它。

您可以在设置NOSUPERUSER并撤消CONNECT后始终连接到数据库,但您无法查看或访问其中的任何元素,如表格,视图等。因此,psql -Uadmin postgres不会出错,但\d会打印

  

没有发现任何关系。