我已经设置了一个测试服务器并安装了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 ) )
正如您所看到的,我正在使用localhost。我知道dsn是正确的,包括用户名和密码,因为如果我用本地192替换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更改为trust来解决此问题,但这对我的情况没有帮助。
这可能是我需要添加的简单内容,但目前搜索似乎毫无结果。任何人都可以告诉我如何纠正这一点。
的 的 * ----- ----- EDIT *
根据DanielVé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
答案 0 :(得分:3)
请参阅http://www.postgresql.org/docs/9.1/static/auth-methods.html:
ident身份验证方法通过获取客户端来工作 来自ident服务器的操作系统用户名并将其用作 允许的数据库用户名(带有可选的用户名映射)
ident
身份验证方法并不适合来自Web服务器的连接,因为Web进程在一个帐户下运行,通常是www-data
或与数据库帐户无关的一些帐户({在你的情况下{1}}。
由于您希望通过密码进行身份验证,请将其替换为rockprofile
中的md5
,然后重新加载或重新启动PostgreSQL。
此外,您可以更改密码,因为它在跟踪中显示为明确,否定了代码中的替换工作。