使用 Dumpling 导出权限元数据

使用 Dumpling 导出权限元数据功能时,Dumpling 会在导出数据文件之外,额外生成一个名为 accessmeta 的文件,用于记录本次导出任务关联的账号和权限信息。该文件适合需要保留“谁在什么权限上下文中导出了哪些数据”的场景,例如审计导出操作、留存权限快照或在后续核查时快速确认导出用户的角色与授权情况。

使用场景

  • 在导出数据的同时保留导出账号、当前角色和授权信息,便于审计和追溯。
  • 记录本次导出的库表范围和数据筛选条件,帮助后续确认导出范围。
  • 在权限经常变化的环境中,为每次 Dumpling 导出保留一份与导出时刻一致的权限快照。
  • 在将导出文件交接给其他团队时,附带一份可读的权限元数据说明文件。

使用前提与开启方式

该功能没有单独的系统变量或命令行开关。

使用包含该能力的 Dumpling 执行导出任务时,系统会自动在输出目录中生成 accessmeta 文件,无需额外配置。

例如,在 tidb 项目根目录下执行:

make build_dumpling ./bin/dumpling --host 127.0.0.1 --port 4000 --user root --database test --output ./dump_data

导出成功完成后,Dumpling 会在 tidb/dump_data 目录中生成常规导出文件,以及额外的 accessmeta 文件。

accessmeta 文件内容

当前实现中,accessmeta 文件会记录以下信息:

  • 导出任务开始时间
  • 导出任务结束时间
  • 导出用户信息
  • 当前角色信息
  • 当前用户的 SHOW GRANTS 输出结果
  • 本次导出的库表清单
  • --where 指定的数据筛选条件(如果设置)

其中:

  • 用户信息通过导出配置和 USER() 查询结果生成。
  • 角色信息通过 CURRENT_ROLE() 获取。
  • 权限信息通过 SHOW GRANTS 获取。
  • 导出表清单根据 Dumpling 实际准备导出的库表信息生成。

示例输出如下:

dump task start time: 2026-03-29 19:51:16.1847 +0800 CST m=+1.353757667 dump task end time: 2026-03-29 19:51:16.201133 +0800 CST m=+1.370190667 user info: root@127.0.0.1 role info: NONE privileges info: GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION dump table info: test dump data conditions: id > 10

如果导出时没有指定 --where,则 accessmeta 文件中不会出现 dump data conditions 这一行。

与导出结果的关系

accessmeta 文件是额外生成的权限元数据文件,不会替代或修改 Dumpling 原有的导出结果文件,例如:

  • metadata
  • {schema}-schema-create.sql
  • {schema}.{table}-schema.sql
  • {schema}.{table}.000000001.sql
  • {schema}.{table}.000000001.csv

该文件主要用于审计和说明,不参与数据恢复逻辑。

当前实现中,TiDB Lightning 会忽略 accessmeta 文件,因此它不会影响后续使用 Lightning 导入数据。

注意事项与限制

  • 该功能没有独立开关;只要使用包含该能力的 Dumpling 执行导出,导出成功后就会生成 accessmeta 文件。
  • accessmeta 文件在导出任务结束后写入。如果导出过程中提前失败,则可能不会生成该文件。
  • 当前实现会记录 CURRENT_ROLE()SHOW GRANTS 的结果,因此文件内容反映的是导出任务执行时的权限状态。
  • 当使用 --where 时,accessmeta 会记录该筛选条件;未设置 --where 时,不会输出对应字段。
  • 当前实现没有将 --sql 的原始内容写入 accessmeta。如果使用 --sql 导出,自定义 SQL 本身不会出现在该文件中。
  • accessmeta 的写入方式基于本地文件路径。对于 -o 使用外部存储服务 URI 的场景,当前实现未体现专门处理逻辑,因此建议优先在本地输出目录场景中使用该能力。
  • accessmeta 仅用于说明导出任务的权限上下文,不会替代正式的权限管理、授权审计或操作日志。

相关文档