【问题标题】:How can I revoke a PostgreSQL connection access to a database如何撤销对数据库的 PostgreSQL 连接访问
【发布时间】:2022-01-07 05:19:50
【问题描述】:

到目前为止,我有一个名为test_user 的用户,如下图所示,该用户拥有test_db

我想从我拥有的另一个数据库中撤销用户的权限,我们称之为main_db

test_user 撤消数据库main_db 上的所有内容;为什么以 {cloudsqlsuperuser} 成员的 main_user 身份连接。

基本上我只是希望main_user 只能访问main_dbtest_user 只能访问test_db

到目前为止,我运行了revoke privilege all on database gitlabhq_production from test_user

但是当我运行psql -U test_user -d main_db -h 127.0.0.1 -W 时,看起来我仍然能够使用test_user 直接连接到数据库main_db。我希望这会通过一个错误说用户无法连接,我还撤销了main_usertest_db 的所有权限,但看起来我仍然能够在test_table 中插入一行到test_db 中。

P.S 我正在使用带有 Postgres 13 的 GCP Cloud SQL 实例。

我如何做到这一点?

更新

main_db、test_db、main_user、_test_user相关信息

                                                               List of roles
         Role name         |                   Attributes                   |                          Member of                           
---------------------------+------------------------------------------------+--------------------------------------------------------------
 main_user                 | Create role, Create DB                         | {cloudsqlsuperuser}
 test_user                 |                                                | {}
 

                                                   List of databases
        Name         |       Owner       | Encoding |  Collate   |   Ctype    |            Access privileges            
---------------------+-------------------+----------+------------+------------+-----------------------------------------
 main_db             | main_user         | UTF8     | en_US.UTF8 | en_US.UTF8 | =Tc/main_user                          +
                     |                   |          |            |            | main_user=CTc/main_user
 test_db             | test_user         | UTF8     | en_US.UTF8 | en_US.UTF8 | test_user=CTc/test_user

【问题讨论】:

  • 您能否以用户身份运行任何实际查询?即列出表格?
  • 我能够以 main_user 身份运行插入到 test_db 中的表中……我不希望这种情况发生……我应该只能以 test_user 身份运行该插入。那不是实际查询的一部分吗?如果我错了,请纠正我

标签: postgresql google-cloud-sql privileges cloud-sql-proxy


【解决方案1】:

你所要做的就是撤销PUBLIC的权限:

REVOKE ALL ON DATABASE main_db FROM PUBLIC;
REVOKE ALL ON DATABASE test_db FROM PUBLIC;

那么只有数据库的所有者才能连接到它们。

【讨论】:

  • 您好,感谢您的回复,我从 PUBLIC 运行了 REVOKE ALL ON DATABASE test_db;只有...但是拥有 main_db 的 main_user 仍然可以在 test_db 中由 test_user 拥有的表上插入/选择
  • 如果数据库的权限如您在问题中显示的那样,则不会。
  • 是的,test_db 的权限就像我在示例中显示的那样,是不是因为 main_user 是 {cloudsqlsuperuser} 的成员?
  • 可能的。很难说,因为您的问题没有显示角色和成员资格。
  • 嘿,我已经为用户和数据库粘贴了数据库和角色的更新,
猜你喜欢
  • 2016-05-04
  • 2021-07-07
  • 2016-07-13
  • 2017-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-12
相关资源
最近更新 更多