限制 postgres 中的角色访问数据库中的某些模式并且不列出任何其他数据库

限制 postgres 中的角色访问数据库中的某些模式并且不列出任何其他数据库

我在 ubuntu 9.04 下使用 PostgreSQL 8.3。我使用控制台客户端或 Pgadmin III 访问我的数据库服务器。目前,我需要限制对数据库中几个模式的访问,并且不显示服务器中的其他数据库。

例如,我当前的 postgres 服务器有以下数据库:

postgres-8.3-server
|-- db1
|   |-- sch_a
|   |-- sch_b
|   |-- sch_c
|   `-- sch_d
|-- db2
|   |-- sch_e
|   |-- sch_f
|   `-- sch_g
`-- db3
    `-- sch_h

我需要限制角色“joe”仅访问 db2 的 sch_e 和 shc_g,并且不显示同一数据库中的其他架构。列出数据库时,输出应为:

postgres-8.3-server
|-- db2
    |-- sch_e
    `-- sch_g

我当前的解决方案限制了架构和数据库访问,但我仍然可以看到数据库名称列表。当我尝试访问其中任何一个(除了我被允许的那个)时,我收到一条消息,提示在 pg_hba.conf 文件中未找到特定条目,这很好,但并不理想。

我目前正在查看手册并通过谷歌搜索更多信息。

提前致谢

答案1

您无法限制查看哪些数据库存在的能力。但是,既然您可以限制连接能力,那这又有什么关系呢?

如果您希望收到不同的错误消息,您可以尝试让人们通过 pg_hba.conf,然后限制数据库本身的 CONNECT 权限(REVOKE CONNECT ON DATABASE foo FROM public; GRANT CONNECT ON DATABASE foo TO somerole;”)

相关内容