【问题标题】:Postgresql server not asking for password for remote connectionsPostgresql 服务器不要求远程连接的密码
【发布时间】:2014-01-09 06:10:19
【问题描述】:

我发现我的 posgresql 数据库服务器在通过 pgadmin 远程连接时没有询问用户 postgres 的密码。 我的意思是当我通过 pgAdmin 从本地计算机连接到远程数据库服务器时。

我确实在 psql 中添加了密码,ALTER USER postgres PASSWORD 'mypassword'

这是我的 pg_hba.config 文件:

/usr/local/pgsql/bin/psql -qAt -c "show hba_file" | xargs grep -v -E '^[[:space:]]*#'

local   all             all                                     trust
host    all             all             127.0.0.1/32            md5

host    all             all               0.0.0.0/0             md5
host    all             all             ::1/128                 md5

所以,我不太明白这里发生了什么。

有人可以帮忙吗?

非常感谢。

更新:

如果我改变:

local   all             all                                     trust

local   all             all                                     md5

现在,本地连接(通过 SSH)将被要求输入密码(之前没有要求输入密码。)但远程连接仍将在没有密码的情况下连接。

实际上,我尝试通过来自另一台服务器的 rails 应用程序连接到这个数据库服务器,没有密码,并且 rails 服务器启动没有问题。


为了方便起见将结果放在这里

这个问题的真正原因是.pgpass 文件。 Mac 将密码本地存储在用户主文件夹下的.pgpass 文件中。然后每次用户尝试不使用密码登录时,PostgreSQL 都会为用户发送密码。

官方文档here

【问题讨论】:

  • 默认情况下,据我所知,postgresql 是在没有密码的情况下安装的。你必须添加它。我确定文档会说如何。
  • 我确实在 psql 中添加了密码,ALTER USER postgres PASSWORD 'mypassword'
  • 是什么让您认为您在 PgAdmin 中进行远程连接?您是否明确指定 host = 127.0.0.1 或从远程主机连接?如果您使用您的配置通过 unix 套接字连接,则不应出现密码提示,因为您使用的是 trust 模式 ffor unix 套接字 (local)。
  • @CraigRinger 我正在从我的本地计算机连接到远程数据库服务器。
  • 您能否提供更多有关您如何远程连接的详细信息?您最初的帖子让我相信您的意思是在您的 SSH 会话中。

标签: postgresql postgresql-9.1


【解决方案1】:

阅读 Postgresql.org 上的文档

https://www.postgresql.org/docs/current/auth-pg-hba-conf.html

我建议您将用户字段更改为允许远程连接的少数用户的名称:

host    all             john,charles    0.0.0.0/0   scram-sha-256
host    all             john,charles    ::1/128     scram-sha-256

此外,出于安全原因,我建议您考虑使用 hostssl 并指定可以远程访问的数据库的名称:

hostsll webapp123     john,charles    0.0.0.0/0     scram-sha-256

如果远程访问仅来自特定计算机,请指定它们的静态 IP 地址(如果使用 DHCP,请使用相应的掩码。)

hostsll webapp123     john,charles    1.2.3.4/32    scram-sha-256

这样,您只能破坏数据库 webapp123,用户 john 和 charles 可以执行的操作,并且只能从计算机 1.2.3.4 执行。

如文档中所述,您可以有任意数量的条目,因此如果您想添加一个测试服务器(即您家中的服务器),那么您可以添加一行,如下所示:

hostsll webapp123     john,charles    1.2.3.4/32    scram-sha-256
hostsll webapp123     henry           home-ip/32    scram-sha-256

通过不指定用户,您可能允许任何用户,包括那些没有密码的用户,并且其中一个被选中并且可以正常工作...

当然,我强烈建议您不要指定在您的数据库中具有管理权限的用户,除非您还指定了他的静态 IP 地址。

【讨论】:

    【解决方案2】:

    感谢所有 cmets 和回答 ppl!

    但这个问题的真正原因是.pgpass 文件。我的 Mac 将密码本地存储在我的用户主文件夹下的 .pgpass 文件中。然后每次我尝试不使用密码登录时,PostgreSQL 都会为我发送密码。 所以这就是我遇到的问题......

    再次感谢大家的回复和cmets!

    更多详情可以参考here

    【讨论】:

    • 谢谢!我也遇到了这个。很有帮助。
    猜你喜欢
    • 1970-01-01
    • 2015-10-28
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多