gpt4 book ai didi

php - “PHP警告:pg_connect():无法连接到PostgreSQL服务器:致命:用户…的密码身份验证失败”,Raspberry Pi(拉伸(stretch))

转载 作者:行者123 更新时间:2023-11-29 13:19:02 26 4
gpt4 key购买 nike

很抱歉打扰大家,我是PostgreSQL的新手,但是我的项目需要我建立一个自动系统,连接到运行PostgreSQL服务器的服务器。长话短说,假设需要我通过PHPpg_connect()执行从Web表单到服务器的数据插入/操作。Web表单位于/var/www/html/web_form.html本地,并调用执行数据插入的PHP脚本,

    <form name="some_name" action="script.php" method="POST">

所以数据插入是在本地服务器上完成的。
我使用一个树莓Pi 3来模拟“服务器”(这样在早期开发期间就不会“打扰”真正运行的服务器)。覆盆子皮正在运行一个覆盆子伸展发行版。原来是杰西,但后来我决定把
    deb http://mirrordirector.raspbian.org/raspbian/ stretch main contrib non-free rpi

优先级为 100。它还有 postgresql-9.6.3(来自Stretch)、 php7.0.19-1(也来自Stretch)和 apache2.4.25(来自官方Raspbian)。请注意,Stretch repo确实取代了Jessie的许多官方稳定包,而且众所周知,它本身“不太稳定”,所以它也可能是问题的根源。
我可以从远程计算机访问服务器中的数据库,无论是使用direct psql、Python( psycopg2),甚至是通过PHP访问完全相同的Web表单(从远程计算机尝试),所以这绝不会是因为PDO问题(我已经检查过了 phpinfo(),但可以随意对此给出建议,因为我自己并不真正了解PDO)。在本地,我可以通过 psql访问数据库,但不能通过PHP( pg_connect)进行本地访问。
我花了好几个小时来处理这个问题,但都白费了。请帮帮我。
这是我的覆盆子皮的配置:

PHP代码片段:
    $conn_str="host=localhost port=5432 dbname=my_db_name user=my_user_name password=my_password";
$db = pg_connect($conn_str);
if(!$db){
$errormessage=pg_last_error();
echo "Error 0: " . $errormessage;
exit();
}

请注意,同样的代码在另一台计算机上运行得很好。当Web表单位于访问所述服务器的远程计算机中,或者Web表单正在访问远程计算机自己的本地PostgreSQL服务器时,我已经成功地执行了数据插入,但在这个特定的问题服务器中没有执行。在浏览器中运行时,仅显示:
    Error 0:

在控制台中运行时的结果:
PHP Warning:  pg_connect(): Unable to connect to PostgreSQL server: FATAL:  password authentication failed for user "raspiserver"

FATAL: password authentication failed for user "raspiserver" in php shell code on line 1

我还试图将 host=localhost更改为 host=127.0.0.1host=0.0.0.0。我确信错误来自该代码块,因为该块已经在我的PHP代码的第一行,而我放置的其他错误报告代码,每个都有不同的 Error X:编号。

PostgreSQL配置:
对于 pg_hba.conf内容:
    # Database administrative login by Unix domain socket
local all postgres peer

# TYPE DATABASE USER ADDRESS METHOD

# "local" is for Unix domain socket connections only
local my_db_name my_user_name 127.0.0.1/32 md5
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5

# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
# local replication postgres peer
#host replication postgres 127.0.0.1/32 md5
#host replication postgres ::1/128 md5

#host all all 0.0.0.0/0 md5
host another_db_name my_user_name 192.168.52.0/24 trust
host my_db_name my_user_name 192.168.52.0/24 trust

我已经尝试注释/取消注释第7行,或者将第7行和第8行都更改为 md5trustpassword。我还尝试从第7行删除 127.0.0.1/32,或将其更改为 127.0.0.0/240.0.0.0/0。是的,我确实表演过
    sudo /etc/init.d/postgresql reload
sudo /etc/init.d/postgresql restart

(甚至 sudo reboot)我所做的每一个改变。
对于 postgresql.conf内容:
我已经设置了 listen_addresses = '*'password_encryption = on,其余的保持不变。
三。
防火墙:
sudo iptables -L -n不显示任何条目:
    Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

我的配置有什么问题?
是伸展运动的原因吗?
还是因为PostgreSQL-9.6的实现?
我已经到处搜索过了,但大多数解决方案只建议将 pg_hba.conf改为 trust,或者假设 user名称不存在。
我很绝望,请帮忙。
(请注意,我对PHP、PostgreSQL、Apache或服务器一无所知,所以请不要指望我真的知道到目前为止我做了什么。请分析每件事。。。。另外,英语不是我的母语,所以我可能会在这里和那里混合一些“行话”(如果有的话)。。。。对不起……)

最佳答案

pg_hba.conf中的此特定声明不正确:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local my_db_name my_user_name 127.0.0.1/32 md5

因为当 TYPE字段是 local时,该行必须有4个字段,而不是5个:没有 ADDRESS字段,因为它不适用于Unix域套接字(这就是 local的真正含义),只适用于TCP连接(声明 TYPEhosthostssl
当您用这一行的pg_hba.conf重新加载PostgreSQL时,它将失败
LOG:  invalid authentication method "127.0.0.1/32"

但只有在服务器日志中才能看到。由于失败,它将忽略您的新版本 pg_hba.conf
不管怎样,另一行已经在你的文件中了
host    all             all             127.0.0.1/32            md5

可能是你想要的。在这种情况下,只需删除有问题的行,重新加载,并检查服务器日志中指示重新加载成功的消息。

关于php - “PHP警告:pg_connect():无法连接到PostgreSQL服务器:致命:用户…的密码身份验证失败”,Raspberry Pi(拉伸(stretch)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44967826/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com