PostgreSQL - springboot连接
springboot连接
在 PostgreSQL 配置 SCRAM-SHA-256 认证后,Spring Boot 应用需通过升级 JDBC 驱动、调整配置参数及密码更新等步骤实现连接,以下是具体操作指南:
一、PostgreSQL 服务器端配置
-
修改加密方式
在postgresql.conf中设置:password_encryption = scram-sha-256执行
pg_ctl reload或重启服务使配置生效。 -
更新用户密码
确保所有用户密码使用 SCRAM-SHA-256 加密:ALTER USER your_username WITH PASSWORD 'new_password';或通过
\password命令交互式修改。 -
验证加密方式
查询用户密码是否已升级:SELECT rolname, rolpassword FROM pg_authid WHERE rolcanlogin;若
rolpassword字段以SCRAM-SHA-256$开头,则表示已升级。 -
调整客户端认证配置
在pg_hba.conf中,将认证方法改为scram-sha-256:host all all 0.0.0.0/0 scram-sha-256重新加载配置:
SELECT pg_reload_conf();
二、Spring Boot 应用配置
-
升级 PostgreSQL JDBC 驱动
在pom.xml中使用支持 SCRAM-SHA-256 的驱动版本(≥ 42.2.0):<dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.12.1</version> <!-- 或更高版本 --> </dependency> -
配置数据源
在application.yml或application.properties中设置连接参数:spring: datasource: url: jdbc:postgresql://localhost:5432/your_database?ssl=true&sslmode=require username: your_username password: your_password driver-class-name: org.postgresql.Driver- 关键参数说明:
ssl=true&sslmode=require:启用 SSL 加密(SCRAM-SHA-256 推荐配合 SSL 使用)。- 若使用连接池(如 HikariCP),需确保连接池配置兼容 SCRAM(默认已支持)。
- 关键参数说明:
-
代码示例(Java 配置)
若通过代码配置数据源:@Bean public DataSource dataSource() { HikariDataSource dataSource = new HikariDataSource(); dataSource.setJdbcUrl("jdbc:postgresql://localhost:5432/your_database?ssl=true&sslmode=require"); dataSource.setUsername("your_username"); dataSource.setPassword("your_password"); dataSource.setDriverClassName("org.postgresql.Driver"); return dataSource; }
三、常见问题解决
-
认证失败(Password authentication failed)
- 原因:密码未更新为 SCRAM-SHA-256 格式,或 JDBC 驱动版本过低。
- 解决:
- 确认用户密码已通过
ALTER USER或\password更新。 - 检查驱动版本是否 ≥ 42.2.0。
- 确认用户密码已通过
-
SSL 配置错误
- 原因:PostgreSQL 服务器未启用 SSL 或证书无效。
- 解决:
- 在
postgresql.conf中启用 SSL:ssl = on ssl_cert_file = '/path/to/server.crt' ssl_key_file = '/path/to/server.key' - 在 Spring Boot 中调整 SSL 模式(如
sslmode=verify-full验证证书)。
- 在
-
连接池兼容性
- 现象:使用旧版连接池(如 DBCP2)时连接失败。
- 解决:升级连接池至最新版本(如 HikariCP 3.x+)。
四、验证连接
-
使用
psql测试
在终端执行:psql "host=localhost port=5432 dbname=your_database user=your_username password=your_password sslmode=require"若能成功连接,说明服务器配置正确。
-
Spring Boot 应用启动日志
检查日志中是否有类似以下输出:Tomcat initialized with port(s): 8080 (http) HikariPool-1 - Starting... HikariPool-1 - Start completed.无认证错误即表示连接成功。
五、推荐实践
-
强制 SCRAM-SHA-256
在pg_hba.conf中逐步淘汰md5,仅保留scram-sha-256:host all all 0.0.0.0/0 scram-sha-256 -
定期轮换密码
使用ALTER USER定期更新密码,确保加密哈希持续更新。 -
监控认证日志
在 PostgreSQL 日志中监控认证失败事件:log_connections = on log_disconnections = on log_hostname = on
通过以上步骤,Spring Boot 应用可安全连接至启用 SCRAM-SHA-256 认证的 PostgreSQL 数据库,兼顾安全性与兼容性。
连接说明
PostgreSQL 的 SCRAM-SHA-256 认证方式并不强制要求开启 SSL,但强烈建议同时启用 SSL 以实现端到端的安全防护。以下是具体分析:
1. SCRAM-SHA-256 认证的安全性
- 核心机制:SCRAM-SHA-256 是一种基于盐值(Salt)和多次哈希的挑战-响应认证协议,能防止密码在传输过程中被窃听或重放攻击。即使攻击者截获了认证流量,也无法直接获取用户密码。
- 独立性:SCRAM-SHA-256 的认证过程本身不依赖 SSL/TLS,即使未启用 SSL,认证阶段的安全性仍高于旧版 MD5 或明文密码。
2. 为什么推荐同时启用 SSL?
- 数据传输加密:SCRAM-SHA-256 仅保护认证过程中的密码安全,但数据库的其他数据(如查询内容、表结构等)仍以明文传输。SSL/TLS 可加密所有网络流量,防止中间人攻击或数据泄露。
- 防御深度:结合 SSL 和 SCRAM-SHA-256 可形成多层次防护:
- SSL/TLS:保护数据在传输层的机密性和完整性。
- SCRAM-SHA-256:确保用户身份认证的安全性。
- 合规性要求:许多行业(如金融、医疗)的安全标准(如 PCI DSS、HIPAA)要求数据库连接必须加密,此时 SSL 是必需的。
3. 实际配置建议
- 服务器端配置:
- 在
postgresql.conf中启用 SSL:ssl = on ssl_cert_file = '/path/to/server.crt' ssl_key_file = '/path/to/server.key' - 在
pg_hba.conf中强制 SCRAM-SHA-256 认证,并优先使用hostssl(仅 SSL 连接):# 允许 SSL 连接的客户端使用 SCRAM-SHA-256 hostssl all all 0.0.0.0/0 scram-sha-256 # 禁止非 SSL 连接(可选,根据安全需求) hostnossl all all 0.0.0.0/0 reject
- 在
- 客户端配置:
- 在 Spring Boot 的
application.yml中启用 SSL:spring: datasource: url: jdbc:postgresql://localhost:5432/your_db?ssl=true&sslmode=require username: your_user password: your_password - 使用最新版 PostgreSQL JDBC 驱动(≥ 42.2.0)以支持 SCRAM-SHA-256 和 SSL。
- 在 Spring Boot 的
4. 验证配置
- 检查 SSL 连接:
若-- 在 PostgreSQL 中执行 SELECT ssl, version() FROM pg_stat_ssl WHERE pid = pg_backend_pid();ssl为true,则连接已加密。 - 测试认证方式:
若-- 查看用户密码加密方式 SELECT rolname, rolpassword FROM pg_authid WHERE rolname = 'your_user';rolpassword以SCRAM-SHA-256$开头,则配置正确。
5. 特殊情况处理
- 旧客户端兼容性:若客户端不支持 SCRAM-SHA-256 或 SSL,可临时使用
host行允许非 SSL 连接,但需评估安全风险。 - 性能影响:SSL 加密会引入少量 CPU 开销,但在现代硬件上通常可忽略。可通过调整 SSL 密码套件(如禁用弱算法)优化性能。
本文来自博客园,作者:蓝迷梦,转载请注明原文链接:https://www.cnblogs.com/hewei-blogs/articles/19083069

浙公网安备 33010602011771号