是否所有用户都需要访问 pg_hba.conf 中的 postgres 数据库?

Myt*_*yky 4 postgresql permissions pgadmin

我只是在 pgAdmin 中测试用户创建过程。我有一个数据库db1,我想为其创建一个用户以便能够连接到它。我希望这是用户可以连接的唯一数据库。

创建用户后,我打开我的pg_hba.conf文件并添加了几行:

host    db1 dbuser  127.0.0.1/32    md5
host    db1 dbuser  ::1/128         md5
Run Code Online (Sandbox Code Playgroud)

postgres 用户可以访问所有数据库:

host    all postgres    127.0.0.1/32    md5
host    all postgres    ::1/128         md5
Run Code Online (Sandbox Code Playgroud)

当我通过 pgAdmin 连接到服务器时,我收到一条错误消息,指出dbuser无法访问postgres数据库。

这是正常的吗?当我希望 dbuser 只访问 postgres 数据库时,他是否应该甚至需要访问 postgres 数据库db1?一旦我将 postgres 添加到 的数据库列表中dbuser,我就可以连接。

Erw*_*ter 5

您看到的是pgAdmin连接到配置的 维护数据库-postgres默认情况下。在对象浏览器窗格中选择一个服务器,然后从上下文菜单中选择“属性”(右键单击)。下拉菜单仅提供典型选项,但您可以输入任何数据库名称

如果用户的访问权限仅限于一个数据库pg_hba.conf(这最有效的地方),您可以通过将此数据库配置为维护数据库来使其与 pgAdmin 一起使用。不会有什么不好的事情发生。

另一种选择是另外授予对维护数据库(postgres或其他)的访问权限pg_hba.conf

您还可以打开所有大门pg_hba.conf并使用数据库权限来管理访问,就像@a_horse 在他的回答中解释的那样。这更易于管理,但限制访问pg_hba.conf更安全、更快捷——更强大,可抵御 DoS 攻击和重负载。不过,在大多数情况下不会有太大的不同。

引用pgAdmin 1.22(pgAdmin III 的最终版本)的文档

维护 DB 字段用于指定 pgAdmin 连接到的初始数据库,并且预计将安装pgAgent 模式和adminpack对象(都是可选的)。在 PostgreSQL 8.1 及更高版本上,维护数据库通常称为“postgres”,在早期版本中经常使用“template1”,尽管为此目的最好创建一个“postgres”数据库以避免模板数据库混乱。