跳到主要内容
版本:dev

H2 数据库 - 仅供测试,禁止生产环境使用

⚠️ 严重安全警告:H2 数据库不适合生产环境。它仅供本地测试和开发使用。在生产环境中使用 H2 会使您的服务器面临严重的安全漏洞。在使用 H2 之前,请仔细阅读本页面。

🔴 安全风险 - 使用前必读

什么是 H2 数据库?

H2 是一个开源的 Java SQL 数据库。HertzBeat 内置 H2 作为默认嵌入式数据库,以便在无需单独安装数据库的情况下快速进行测试和评估。

为什么 H2 在生产环境中危险

H2 拥有一个叫做 CREATE ALIAS 的内置功能,允许在数据库查询中执行任意 Java 代码。这意味着:

-- 极其危险的 H2 功能示例:
CREATE ALIAS EXEC AS $$
String exec(String cmd) throws Exception {
Runtime.getRuntime().exec(cmd);
return null;
}
$$;

-- 可以在服务器上执行 Shell 命令:
CALL EXEC('rm -rf /重要数据');

如果您的 H2 数据库被恶意用户访问,他们可以:

  • 在 HertzBeat 服务器上执行任意 Shell 命令
  • 读取 HertzBeat 进程可访问的任何文件
  • 完全控制运行 HertzBeat 的服务器
  • 访问所有监控数据,包括敏感凭据

📖 详细信息请参阅官方 H2 安全文档

网络暴露风险

H2 可以以服务器模式运行,可能在网络上暴露数据库管理界面。默认情况下,H2 使用端口 8082(Web 控制台)和 9092(TCP 服务器)。如果这些端口可以从外部访问,任何用户都可以直接连接到您的数据库。


✅ H2 适合的场景

  • 本地开发:快速搭建评估 HertzBeat 功能
  • 自动化测试:隔离环境中的 CI/CD 流水线
  • 演示展示:向利益相关者展示 HertzBeat
  • 学习了解:在生产部署前了解 HertzBeat

🚫 H2 不适合的场景

  • 生产部署
  • 多用户环境
  • 含有敏感监控数据的系统
  • 可从互联网访问的 HertzBeat 实例
  • 需要跨重启数据持久化的环境
  • 高可用性部署

🔒 迁移到生产数据库

对于生产使用,请迁移到以下支持的数据库之一:

MySQL / MariaDB(推荐用于大多数部署)

  1. 安装 MySQL 5.7+ 或 MariaDB 10.5+
  2. 创建专用数据库和用户:
CREATE DATABASE hertzbeat;
CREATE USER 'hertzbeat'@'localhost' IDENTIFIED BY '强密码';
GRANT ALL PRIVILEGES ON hertzbeat.* TO 'hertzbeat'@'localhost';
FLUSH PRIVILEGES;
  1. 更新 application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/hertzbeat?useUnicode=true&characterEncoding=utf-8
username: hertzbeat
password: 强密码
driver-class-name: com.mysql.cj.jdbc.Driver
  1. 下载 MySQL JDBC 驱动并放入 ext-lib/
  2. 重启 HertzBeat

PostgreSQL(推荐用于企业部署)

  1. 安装 PostgreSQL 12+
  2. 创建数据库和用户:
CREATE USER hertzbeat WITH PASSWORD '强密码';
CREATE DATABASE hertzbeat OWNER hertzbeat;
GRANT ALL PRIVILEGES ON DATABASE hertzbeat TO hertzbeat;
  1. 更新 application.yml
spring:
datasource:
url: jdbc:postgresql://localhost:5432/hertzbeat
username: hertzbeat
password: 强密码
driver-class-name: org.postgresql.Driver

📋 生产部署前安全检查清单

在任何非测试环境中部署 HertzBeat 之前,请验证:

  • H2 数据库已替换为 MySQL 或 PostgreSQL
  • H2 Web 控制台已禁用
  • 数据库凭据强大且唯一
  • 数据库无法直接从互联网访问
  • HertzBeat 通过带 SSL 的反向代理运行
  • 监控凭据已加密且受访问控制保护
  • 已配置定期数据库备份

记住:H2 的便利性是以安全为代价换来的。在任何实际环境中部署 HertzBeat 之前,请务必计划迁移到生产级数据库。