我在 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;”)