gpt4 book ai didi

php - 在本地主机上使用 pdo 连接到 postgresql 时出现问题 (08006)

转载 作者:搜寻专家 更新时间:2023-10-31 20:43:11 24 4
gpt4 key购买 nike

我已经设置了一个测试服务器并安装了 PHP 5.4(带 Nginx 的 zend 服务器)和 postgresql 9.1。

我正在尝试使用以下代码连接到 postgresql 数据库:

define('DB_TYPE', 'pgsql');
define('DB_HOST', 'localhost');
define('DB_PORT', 5432);
define('DB_NAME', 'rockprofile');
define('DB_USERNAME', 'rockprofile');
define('DB_PASSWORD', 'PASSWORD');

$dsn = DB_TYPE . ':dbname=' . DB_NAME . ';host=' . DB_HOST . ';port=' . DB_PORT;

try {
$db = new PDO($dsn, DB_USERNAME, DB_PASSWORD);
} catch (PDOException $e) {
echo $e->getMessage();
print_r($e->getTrace());
}

然而,这会生成以下内容:

SQLSTATE[08006] [7] FATAL: Ident authentication failed for user "rockprofile"

Array (
[0] => Array (
[file] => /usr/share/nginx/inc/config.php
[line] => 24
[function] => __construct
[class] => PDO
[type] => -> [args] => Array (
[0] => pgsql:dbname=rockprofile;host=localhost;port=5432
[1] => rockprofile
[2] => PASSWORD ) )
[1] => Array ( [file] => /usr/share/nginx/bands/index.php
[line] => 2
[args] => Array (
[0] => /usr/share/nginx/inc/config.php )
[function] => include ) )

如您所见,我正在使用本地主机。我知道 dsn 是正确的,包括用户名和密码,因为如果我用本地 192 IP 替换 localhost,它就可以工作。怀疑是postgresql配置的问题,目前内容如下:

local   all             all                                    peer
host all all 127.0.0.1/32 ident
host all all ::1/128 ident
host all all 192.168.1.0/24 md5

在搜索时,有人似乎通过将 ident 更改为信任上述配置来解决此问题,但这对我的情况没有帮助。

这可能是我需要添加的一些简单内容,但目前搜索似乎没有结果。谁能告诉我如何纠正这个问题。

*-----EDIT-----*

根据 Daniel Vérité 对修复问题的回应,需要将 ident 更改为 MD5。我个人不得不为 IPv4 和 IPv6 条目更改此设置。

local   all             all                                    peer
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
host all all 192.168.1.0/24 md5

最佳答案

参见 http://www.postgresql.org/docs/9.1/static/auth-methods.html :

The ident authentication method works by obtaining the client's operating system user name from an ident server and using it as the allowed database user name (with an optional user name mapping)

ident 身份验证方法并不真正适合来自 Web 服务器的连接,因为 Web 进程在一个帐户下运行,通常是 www-data 或一些具有与数据库帐户没有关系(在您的情况下为 rockprofile)。

由于您希望通过密码进行身份验证,因此请在 pg_hba.conf 中将其替换为 md5 并重新加载或重新启动 PostgreSQL。

您也可以更改您的密码,因为它在跟踪中以明文形式出现,从而使您在代码中的替换工作无效。

关于php - 在本地主机上使用 pdo 连接到 postgresql 时出现问题 (08006),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17724664/

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