ashleyhindle/private-dump

CLI 脚本,用于导出 MySQL 数据库,并清理敏感数据输出,适用于开发/测试环境

安装: 6

依赖者: 0

建议者: 0

安全: 0

星标: 6

关注者: 3

分支: 0

开放问题: 6

类型:项目

v0.2.2 2023-06-09 08:33 UTC

README

Private Dump 是一个 CLI 工具,可以创建 MySQL 数据库的匿名化备份,通常用于开发或测试环境。

它通过读取一个 JSON 配置文件来完成,该文件描述了哪些表列需要修改及其修改方式。

travis-ci-build-status styleci-status

Private Dump 需要 PHP >= 7.3

目录

安装

使用 Composer 安装

composer require ashleyhindle/private-dump

使用 curl 安装

curl -Lo private-dump https://github.com/cazana/private-dump/releases/download/v0.1.1/private-dump
chmod a+x private-dump 

使用方法

当 private-dump 在有效配置下运行时,它将输出到 stdout,允许您将其重定向到文件或将它传递给另一个程序(用于压缩、传输、加密等)。

首先,手动创建一个配置文件或从一个示例配置中复制,然后

Composer:

  • vendor/bin/private-dump.phar -c private-dump.json > /backups/mysql-backup-with-sensitive-data-overwritten.sql

Curl:

  • private-dump -c private-dump.json > /backups/mysql-backup-with-sensitive-data-overwritten.sql

您也可以从命令行覆盖 MySQL 用户名、密码和主机名

Composer:

vendor/bin/private-dump.phar -c private-dump.json -u bigben -p bingbong -h rds-213121231-13gb.amazon.com > /backups/mysql-backup-with-sensitive-data-overwritten.sql

Curl:

private-dump -c private-dump.json -u bigben -p bingbong -h rds-213121231-13gb.amazon.com > /backups/mysql-backup-with-sensitive-data-overwritten.sql

注意:最好不在命令行中传递密码,因为它可能会在进程列表中显示,并保留在用户的历史记录中。

配置文件

配置文件是一个包含以下内容的 JSON 字典:

  • 数据库连接详情
  • 要备份的数据库列表
  • 具有替换或转换器的表列表
    • 种子器 - 一列可以用作行种子器,以获得连续备份的可重复性
    • 保留 - 如果指定列匹配正则表达式,则某些行可以保持原样
    • 具有替换或转换器的列
    • 限制输出的选项
      • where - 在检索要备份的数据时添加到查询中:... WHERE xxx...
      • limit - 在检索要备份的数据时添加到查询中:... LIMIT xxx...

示例配置和流行应用的配置位于 configs 目录中。

注释示例配置 - private-dump.json

{
    "connection": { -- Database connection details
        "username": "bigben",
        "password": "bingbong",
        "hostname": "192.168.56.81"
    },
    "databases": { -- Databases to dump - databases not present will not be dumped
        "databaseName": {  -- All tables in this database are dumped
            "tableName": { -- Referenced tables allow replacements
                "email_address": "@email", -- Column and its replacement
                "full_name": "@fullName",
                "is_active": 0, --  Column with hardcoded value
                "$options": { -- Special options array for limit/where
                    "where": "last_login > NOW() - INTERVAL 1 WEEK",
                    "limit": 25
                }
            }
        },
        "databaseTwo": {}, -- Dump entire database and tables, with no replacements
        "databaseThree": {
            "users": {
                "$options": { -- Only options to limit data, no replacements
                    "where": "is_active=1"
                }
            }
        }
        "databaseThree": {
            "users": {
                "@seed": "id", -- Seed each row using user id, to get repeatability
                "@keepif": { -- Keep all rows with emails using domain @ourdomain.com intact
                    "column": "email",
                    "regex": "^.*@ourdomain.com$"
                }
                "first_name": "@user(current_user).firstName",
                "last_name": "@user(current_user).lastName",
                "email": "@user(current_user).email", - email will be based on the first and last names
            }
        }
    }
}

键值表

Private Dump 通过在配置文件中使用数组来支持替换键值存储中的值,将 value 列与 key 列链接如下

{
    "connection": {...},
    "databases": {
        "wordpress": {
            "wp_options": {
                "option_value": {
                    "$link": "option_name",
                    "$transformers": {
                        "admin_email": "@email",
                        "mailserver_pass": "@password",
                        "autoload": "yes"
                    }
                }
            }
        }
    }
}

这比标准的替换更复杂,但为匿名化所有类型的数据提供了很大的灵活性。

替换

这些功能中的大多数都是由惊人的Faker库实现的。在Faker的文档中列出的所有格式化器都支持在Private Dump的配置文件中

以下所有替换都应该以一个@开头,如下例配置文件所示:示例配置文件

如果您需要使用硬编码的值(active=0,completed=1),可以在配置文件中省略@:例如"active": 0

您可以将变量传递给命令,如下所示:@numberBetween|100,1000

文本

  • original - 原始值,与修饰符一起使用很有用
  • string - 随机长度的字符串,最多255个字符
  • realText - 书籍中的引用
  • loremSentence - 一句Lorem
  • loremParagraph - 三句Lorem
  • loremParagraphs - 三段Lorem

日期

  • iso8601 - 2019-01-20
  • iso8601Recent - 最近3个月的ISO 8601日期

互联网

随机

  • randomDigit - 单个数字
  • randomNumber - 最多8位数字
  • randomLetter
  • randomString - 随机长度的字符串,最多255个字符

用户

  • firstName
  • lastName
  • title - Ms. Mr. Dr.
  • fullName - Brian May
  • fullAddress - 一行:建筑物号,街道,城市,州/县,邮政编码/邮编
  • buildingNumber - 368
  • streetName - Broadway
  • streetAddress - 368 Broadway
  • city - London
  • postcode - SW1A 0AA
  • country - England
  • state - Texas
  • county - London
  • latitude - 51.5008
  • longitude - -.1246
  • phoneNumber
  • email - bigben@example.com
  • username - BigBen
  • password
  • url - https://www.parliament.uk/bigben
  • ipv4 - IPv4地址
  • ipv6 - IPv6地址

支付

  • creditCardType - Mastercard
  • creditCardNumber - 4444 1111 2222 3333
  • creditCardExpirationDate - 04/22
  • creditCardExpirationDateString - '04/13'
  • iban - BI6B3N8497112740YZ575DJ28BP4
  • swiftBicNumber - BIGBEN22263

公司

  • company - Company-Name
  • jobTitle - Croupier

杂项

  • boolean
  • md5
  • sha1
  • sha256
  • countryCode - UK
  • currencyCode - EUR

条形码

  • barcodeEan13
  • barcodeEan8
  • barcodeIsbn13
  • barcodeIsbn10

转换器

  • uppercase
  • lowercase

这些注释主要供我自己的开发使用,请随意忽略。

开发步骤

  1. 安装Box
  2. 修改PHP配置以设置phar.readonly = Off
  3. box build
  4. chmod a+x bin/private-dump.phar

发布流程

  1. 构建PHAR:box build
  2. 重命名PHAR:mv bin/private-dump.phar ./private-dump
  3. 根据git tag --list的下一个版本更新README.md中的安装说明中的版本
  4. 标记下一个发布:git tag -a vx.x.x -m "发布 x.x.x"
  5. 推送:git push origin --tags
  6. 在GitHub上编辑发布,附加新创建的bin/private-dump文件