
Java连接MySQL的安全加固方法
密码加密处理
使用强加密算法对数据库密码进行加密,推荐使用AES或RSA等标准加密方式。在应用程序中存储加密后的密码,运行时解密使用。避免在代码或配置文件中直接存储明文密码。
加密示例代码:
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class PasswordEncryptor {
private static final String ALGORITHM = "AES";
private static final byte[] KEY = "your-16-byte-key".getBytes();
public static String encrypt(String value) throws Exception {
SecretKeySpec keySpec = new SecretKeySpec(KEY, ALGORITHM);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
byte[] encrypted = cipher.doFinal(value.getBytes());
return Base64.getEncoder().encodeToString(encrypted);
}
public static String decrypt(String encrypted) throws Exception {
SecretKeySpec keySpec = new SecretKeySpec(KEY, ALGORITHM);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, keySpec);
byte[] decoded = Base64.getDecoder().decode(encrypted);
byte[] decrypted = cipher.doFinal(decoded);
return new String(decrypted);
}
}
连接串安全配置
在JDBC连接字符串中启用SSL加密通信,防止网络嗅探。配置示例:
jdbc:mysql://localhost:3306/dbname?verifyServerCertificate=true&useSSL=true&requireSSL=true
避免在连接字符串中直接包含密码,采用如下格式:
jdbc:mysql://localhost:3306/dbname?user=username
在代码中通过单独的参数传入解密后的密码。
使用连接池与凭证管理
配置专业的连接池(如HikariCP、DBCP),在连接池配置中分离敏感信息。示例HikariCP配置:
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/dbname");
config.setUsername("username");
config.setPassword(PasswordEncryptor.decrypt("encryptedPassword"));
config.addDataSourceProperty("cachePrepStmts", "true");
config.addDataSourceProperty("prepStmtCacheSize", "250");
最小权限原则
为应用数据库账号分配最小必要权限,通常只需要SELECT、INSERT、UPDATE、DELETE等基本操作权限,避免授予CREATE、DROP或ALTER等高风险权限。
定期轮换密钥
建立密钥管理策略,定期更换加密密钥。密钥轮换时需要保留旧密钥一段时间,以便解密历史数据。

2854

被折叠的 条评论
为什么被折叠?



