Postgres 接受任何密码

Posted

技术标签:

【中文标题】Postgres 接受任何密码【英文标题】:Postgres accepts any password 【发布时间】:2014-01-30 00:43:28 【问题描述】:

我有以下代码连接到我的远程服务器上的数据库(连接脚本驻留在同一台服务器上):

Database::$ErrorHandle = new PDO('pgsql:host=111.222.33.44;dbname=mydatabase;', 'postgres', 'mypassword', $db_settings);

问题是我可以将密码更改为任何内容,并且仍然可以建立连接!真的是什么鬼!?!

任何人都可以通过在不同服务器上运行的 php 脚本连接到我的数据库(前提是您知道 IP 和数据库名称)吗?

如何强制使用密码,我查看了以下堆栈溢出页面并按照他们所说的做了,但仍然没有运气: How to change PostgreSQL user password?

我正在运行带有 PHP 5.5 和 Apache2 的 Ubuntu 12.04 服务器

【问题讨论】:

【参考方案1】:

当然,您的 postgresql 数据库可以正确配置为仅与经过身份验证的用户连接,甚至是来自某些 IP/套接字的某些用户(Postgres 中的角色)。

一些注意事项:

您看到数据了吗?或者你可以连接到服务器吗?你能列出数据库吗?

查看您的 pg_hba.conf 并设置适当的权限,每个角色每个数据库每个源

您是否将mydatabase 的访问权限授予所有人?您授予了哪些角色访问权限?

数据库是否在公共方案中有其表?并授予公众访问权限?

是的,通过此配置,知道您的 IP 和数据库名称的每个人都可以连接到您的数据库。

【讨论】:

谢谢。我查看了 pg_hba.conf 并注意到这一行 host all all 111.222.33.44/24 trust 并将其更改为 host all all 111.222.33.44/24 md5 现在我的密码按预期工作。如果允许,我会将您的答案标记为正确。 很高兴为您提供帮助。您只想允许本地连接吗?或者您是否希望远程用户使用数据库(使用正确的凭据?)如果是这样,请查看 local 行而不是基于主机的连接。 只有我可以访问服务器(希望如此),所以我不太担心远程连接。像我这样的基于host 的连接是什么?那么您是说local 行正在处理远程连接吗?好像有点像谎言……(虽然我很确定这不是谎言而且我只是个白痴哈哈) 本地 = 本地连接/套接字; host tcp/ip 连接。如果您只从服务器运行的机器访问您的数据库(例如通过您的 WP 站点),请不要使用主机行。因此,如果您不需要远程 IP 连接到您的数据库服务器,请评论主机行! 好的,我现在就这样做。 peer 是什么意思?

以上是关于Postgres 接受任何密码的主要内容,如果未能解决你的问题,请参考以下文章

postgres 9.3 windows的空密码登录失败

Postgres 要求忘记密码 (MacOS)

postgres密码修改

为啥 Postgres 不接受我的计数列?

致命:连接到 postgres 时用户“postgres”的密码验证失败

总结:修改相关postgres用户密码