php - PDO 在 Postgres 上使用什么样的身份验证?
问题描述
我尝试使用以下代码连接到我的数据库:
Db::$dbh = new PDO("pgsql:dbname=$db;host=$host;port=$port", $user, $pass, $opt);
它失败了:
致命:用户“postgres”的身份验证失败
当我在命令行上使用相同的凭据时,它工作正常:
psql -h127.0.0.1 -Upostgres --password -ddatabase1 -p5432
Password for user postgres:
psql (10.5)
Type "help" for help.
database1=#
为什么 PDO 使用身份验证,即使我明确使用用户名和密码?
更新我发现命令行在localhost
用作主机名时也会失败。显然127.0.0.1
和localhost
不可互换。
解决方案
当localhost
用作主机时,PDO(或 Postgres?)可能使用 IPv6 进行连接。我的那行是这样的pg_hba.conf
:
host all all ::1/128 ident
所以,这就是ident
使用的原因。
推荐阅读
- akka - 在 akka 教程中,如果物联网主管不与其他参与者交互,它会做什么?
- jsp - 如何将 id 属性添加到所有只有名称标签的 html 标签
- mongodb - 为什么要存储所有参考 ID?
- java - 为什么我的 java docker 镜像在笔记本电脑上创建成功,但上传到谷歌云运行时却失败了?
- mongodb - 我可以在 mongodb 中重用连接吗?这种连接实际上是如何工作的?
- angularjs - 用于刷新 $rootScope 的 Angular 1.6.6 捕获事件
- javascript - 传单搜索过滤器仅完全匹配
- javascript - Discord:使用命令从数组中获取数据
- sql - 使用 bigquery 查找特定日期的整体数据
- amazon-web-services - 如何从 ec2 安全组授予对 s3 存储桶的完全访问权限