PostgreSQL SCRAM认证报错:JDBC未提供密码问题求助
问题解决步骤
1. 补全数据库连接的认证参数
代码里已经定义了dbuser和password变量,但调用DriverManager.getConnection()时只传了数据库URL,没传递用户名和密码,这直接导致PostgreSQL服务器要求SCRAM认证时无法获取密码,触发报错。
修改连接代码:
// 原代码 Connection c = DriverManager.getConnection(url); // 修改后 Connection c = DriverManager.getConnection(url, dbuser, password);
2. 修复SQL注入漏洞(必做)
当前代码直接拼接用户输入到SQL语句里,不仅会导致输入含特殊字符(比如单引号)时SQL语法错误,还存在严重的SQL注入风险。改用预编译的PreparedStatement:
替换原有的Statement相关代码:
// 原代码 Statement stmt = c.createStatement(); String sql = "INSERT INTO passageiros(nomeP,destinopretendido) VALUES ('" + nomePassageiro + "','" + destinopretendido + "');"; stmt.executeUpdate(sql); stmt.close(); // 修改后 String sql = "INSERT INTO passageiros(nomeP,destinopretendido) VALUES (?, ?);"; PreparedStatement pstmt = c.prepareStatement(sql); pstmt.setString(1, nomePassageiro); pstmt.setString(2, destinopretendido); pstmt.executeUpdate(); pstmt.close();
3. 额外排查项(可选)
- 确认PostgreSQL JDBC驱动版本:建议使用42.2.0及以上版本,该版本开始原生支持SCRAM-SHA-256认证
- 检查PostgreSQL的
pg_hba.conf配置:确保本地连接的认证规则设置为scram-sha-256,且对应数据库用户的密码是用SCRAM方式加密的
内容的提问来源于stack exchange,提问作者andre Sousa
相关产品推荐
相关产品推荐

