- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我已经设置了一个测试服务器并安装了 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/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!