当我尝试
时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=>
答案 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
会打印
没有发现任何关系。