Laravel 5.8连接PostgreSQL报SQLSTATE[08006]认证方法10不支持错误
错误根因
SQLSTATE[08006] [7] authentication method 10 not supported报错的核心原因是本地PHP的pdo_pgsql扩展版本过低,不支持PostgreSQL 10及以上版本默认启用的scram-sha-256密码认证机制,降级PostgreSQL到9.6后仍报错,基本是多版本PostgreSQL共存导致实际运行的实例和你预期的版本不一致,或者配置权限问题导致你没有成功修改对应配置文件。
可执行修复步骤
- 先验证本地实际运行的PostgreSQL实例信息:
执行lsof -i :5432查看5432默认端口对应的PostgreSQL进程路径,确认运行实例的版本,排除多版本冲突问题。 - 解决pg_hba.conf无法访问问题:
你通过SHOW hba_file;拿到的路径是正确的,无法访问是PostgreSQL data目录默认对普通用户关闭了权限,执行sudo su - postgres切换为postgres系统用户后,即可正常访问对应路径下的配置文件。 - 修改认证配置适配旧扩展:
打开pg_hba.conf文件,将本地连接(IPv4、IPv6的127.0.0.1/32、::1/128条目)的认证方式从默认的scram-sha-256修改为md5,如果是测试环境也可以临时改为trust跳过密码校验验证连通性。
如果你使用PostgreSQL 10及以上版本,还需要修改同目录下的postgresql.conf,将password_encryption参数值改为md5,修改完成后重启PostgreSQL服务,重新设置数据库用户的密码,确保密码以md5格式存储。 - 校验Laravel数据库配置:
核对项目.env文件中的DB_PORT、DB_HOST等参数,确认连接的是你修改过配置的PostgreSQL实例,避免连接到其他未修改配置的版本实例。
内容的提问来源于stack exchange,提问作者code-8
相关产品推荐
相关产品推荐

