You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS下Perl连接PostgreSQL遇SCRAM认证版本错误求助

问题描述

出现的错误

DBI connect('database=bigsdb_pseudomonas_isolates;host=localhost','apache',...) failed: SCRAM authentication requires libpq version 10 or above at test.pl line 23.
Failed to connect to database: SCRAM authentication requires libpq version 10 or above

测试脚本(test.pl)

#!/usr/bin/env perl
use DBI;

# Database connection parameters
my $db_driver = "Pg";
my $db_name = "myDB";
my $db_user = "apache";
my $db_password = "undef";
my $db_host = "localhost";

# Attempt to connect to the database
my $dbh = DBI->connect("DBI:$db_driver:database=$db_name;host=$db_host", $db_user, $db_password);

# Check if the connection was successful
if ($dbh) {
    print "Connected to database successfully!\n";
    # You can perform additional database operations here if needed For example: $dbh->do("SELECT * FROM your_table");
} else {
    print "Failed to connect to database: " . DBI->errstr . "\n";
}
# Disconnect from the database
$dbh->disconnect if $dbh;

系统环境

  • PostgreSQL 13.15(执行pg_config --version输出)
  • Perl 5.16
  • perl-DBD-Pg-2.19.3-5.el7_9.x86_64

已修改pg_hba.conf为md5认证,仍触发SCRAM相关错误,需解决方法。


解决提示
  • 确认pg_hba.conf配置生效
    修改配置后必须重启PostgreSQL服务:

    systemctl restart postgresql-13
    

    同时检查对应条目,确保针对localhost、用户apache、目标数据库的认证方式明确为md5,示例:

    host    myDB         apache         127.0.0.1/32        md5
    host    myDB         apache         ::1/128             md5
    
  • 检查并重置用户密码加密方式
    若用户apache的密码存储为SCRAM格式,即使pg_hba.conf设为md5,PostgreSQL仍会强制SCRAM认证。执行SQL查看:

    SELECT usename, passwd FROM pg_shadow WHERE usename = 'apache';
    

    若passwd以SCRAM-SHA-开头,重置密码为MD5格式:

    ALTER USER apache WITH PASSWORD '你的实际密码';
    

    注:PostgreSQL 10+默认用SCRAM,如需强制MD5重置,可临时修改postgresql.conf中password_encryption = md5,重置后可改回(可选)。

  • 升级perl-DBD-Pg版本
    当前使用的2.19.3版本发布于2013年,不支持SCRAM认证。可编译安装最新版:

    # 安装依赖
    yum install perl-ExtUtils-MakeMaker postgresql13-devel
    # 下载最新源码包(以3.16.0为例)
    wget https://cpan.metacpan.org/authors/id/T/TU/TURNSTEP/DBD-Pg-3.16.0.tar.gz
    tar zxf DBD-Pg-3.16.0.tar.gz
    cd DBD-Pg-3.16.0
    perl Makefile.PL
    make && make install
    

    升级后可兼容SCRAM认证,也能解决版本适配问题。

  • 验证libpq库版本匹配
    即使pg_config显示13.15,DBD::Pg可能链接了旧版libpq。检查链接的库版本:

    ldd $(perl -MConfig -e 'print $Config{archlib}')/auto/DBD/Pg/Pg.so | grep libpq
    

    若版本低于10,设置环境变量优先使用PostgreSQL 13的库:

    export LD_LIBRARY_PATH=/usr/pgsql-13/lib:$LD_LIBRARY_PATH
    

    可将该命令添加到httpd启动脚本或用户.bashrc中永久生效。


内容的提问来源于stack exchange,提问作者Alessandro Brozzi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 21:25:20