使用 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仅用于说明导出任务的权限上下文,不会替代正式的权限管理、授权审计或操作日志。