资讯动态

Docs 如何用 anonymize_database 将生产 pg_dump 脱敏为可共享的测试数据库

发布时间:2026/9/15 18:17:30 来源:尧图企业网站定制
Docs 如何用 anonymize_database 将生产 pg_dump 脱敏为可共享的测试数据库【免费下载链接】docsDocs is an open-source text editor: web-native, made for real-time collaboration, cleanly structured documents and sub-documents with full ownership of your data. Built to scale with Django and React.项目地址: https://gitcode.com/GitHub_Trending/docs150/docs当你需要一份与生产数据同形状的数据库用于压测或性能剖析但又绝不能让生产的个人数据邮箱、姓名、OIDCsub、密码哈希、文档内容落到测试环境时Docs 提供了管理命令anonymize_database它把已恢复好的生产库副本就地、不可逆地脱敏随后重新 dump得到的转储就可以在任何地方加载。命令实现及其工作流说明见 anonymize_database.py命令的 docstring 会通过--help展示是这套流程的官方描述。前提你手上有一份生产pg_dump并且能够搭建一个与生产隔离的一次性数据库。该命令不产生新数据库它只作用于命令所连接的数据库。三步工作流命令文档中给出的完整流程是把生产 dump 恢复到隔离的一次性数据库中独立集群/命名空间、无外网出口、使用的凭据不能访问生产把命令指向这个恢复出来的数据库并运行重新 dump 脱敏后的数据库——这个新 dump 可以安全地加载到任何地方。恢复步骤文档没有给出具体命令按你的 dump 格式使用标准 Postgres 恢复方式即可关键是恢复目标必须满足上面的隔离要求。完成后让后端环境运行manage.py的环境的数据库连接指向这个恢复库。命令启动时会打印目标连接格式为Target database: {NAME} on {HOST}:{PORT} as {USER}执行前先核对这一行确认命令连的是隔离库而不是生产库。先跑 --dry-run 预览命令有两道安全闸环境变量DOCS_ALLOW_ANONYMIZATION必须为1生产环境永远不应设置它并且命令行必须带--yes才会写入。注意代码先检查环境变量所以连 dry-run 也需要先设置它。在后端环境中export DOCS_ALLOW_ANONYMIZATION1 python manage.py anonymize_database --dry-rundry-run 会打印DRY RUN — nothing will be written.然后逐条列出将执行的would scrub {table}含列清单和would TRUNCATE {table} CASCADE不写任何数据。用它确认涉及的都是恢复库中预期存在的表再进入正式执行。如果缺少参数命令会直接拒绝而不是执行未设置环境变量Refusing to run: DOCS_ALLOW_ANONYMIZATION is not set to 1. ...既没有--yes也没有--dry-runRefusing to write without --yes. Re-run with --dry-run to preview, or --yes to perform the irreversible scrub.执行不可逆脱敏python manage.py anonymize_database --yes --expect-db 恢复库的数据库名--expect-db NAME会在写入前断言所连数据库名与NAME完全一致不一致则中止报错形如Connected database is ..., not ... as asserted by --expect-db. Aborting.是防错连的最后一道闸。整个脱敏在单个数据库事务中执行全成功或全回滚不会出现清了一半的状态。执行输出包括每张表一行scrubbed {table}.{列} (N rows)N为该行更新的实际行数每张被清空表一行truncated {table}恢复库中不存在的表打印skip {table}: table absent不报错。全部完成后的成功输出是Anonymization complete. Run VACUUM ANALYZE, then re-dump; the new dump is safe to load into staging.哪些列被覆盖哪些结构被保留命令按表定义了字段级覆盖SQL 表达式并 TRUNCATE 掉内嵌身份信息的运维表表处理方式impress_usersub→anon- \|\| idemail→user- \|\| id \|\| anon.invalidadmin_email→admin- \|\| id \|\| anon.invalidfull_name→User \|\| left(id,8)short_name→Userpassword一律重置为不可用占位符!impress_user_reconciliationactive_email/inactive_email换成按行主键生成的anon.invalid地址source_unique_id伪名化logs清空两个*_email_confirmation_id重新生成 UUID作废可能随 dump 泄露的确认令牌impress_user_reconciliation_csv_importfile与logs清空CSV 文件本身在对象存储中不在 dump 里impress_documenttitle/excerpt变成等长的x串分别截到 255 / 300 字符NULL 保留attachmentsUUID 形式的 S3 键不含 PII保留impress_document_accessteam确定性伪名化为team- \|\| left(md5(team),10)相同团队仍相同保持(team, document)唯一约束的形状impress_invitationemail→invitee- \|\| id \|\| anon.invalidimpress_thread/impress_commentmetadata/body重置为{}::jsonb整表清空TRUNCATE ... CASCADEdjango_session会话数据可能携带认证身份、django_admin_logobject_repr/change_message会泄露标题和邮箱、easy_thumbnails_source、easy_thumbnails_thumbnail。为让数据在压测中保持真实形状以下结构列刻意保留树结构的path/depth/numchild、link_reach、角色、外键、行数、时间戳。由于覆盖是等长的、唯一值按行主键派生唯一约束仍然成立脱敏是确定且幂等的。校验覆盖范围并产出可共享的 dump执行完或结合 dry-run再跑一次带--report-unhandled的运行会列出publicschema 中所有未被覆盖、也未被清空的character varying/text/json/jsonb/citext列python manage.py anonymize_database --dry-run --report-unhandled文档明确这只是覆盖度辅助不是保证——需要操作者人工确认这些列都不可能承载个人数据才能放心信任这份 dump。确认后按成功输出提示执行VACUUM ANALYZE然后重新 dump。新 dump 即为可共享的测试数据库可加载到任何环境。限制与注意事项不触碰对象存储命令从不处理 S3 中 dump 所引用的 documents/attachments 对象那些内容不在 dump 里需要另行处理。不可逆正式运行是就地覆盖除事务回滚外没有恢复手段先--dry-run、再--expect-db是文档设计的防误操作顺序。生产永远不要设置DOCS_ALLOW_ANONYMIZATION1。下一步脱敏后的库与文档量工具链直接配合profile_volumetry/ generate_volumetry.py 可以基于它的形状做剖析数据。documentation/profiling.md 给出的替代路径原文是Alternatively, anonymize a real production dump in an isolated database withanonymize_databaseand profile against that.——即开启 django-silk 后直接对这份脱敏库做性能剖析。【免费下载链接】docsDocs is an open-source text editor: web-native, made for real-time collaboration, cleanly structured documents and sub-documents with full ownership of your data. Built to scale with Django and React.项目地址: https://gitcode.com/GitHub_Trending/docs150/docs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价