printi/db-dump-file-anonymizer

使用假数据匿名化MySQL转储文件的库

v1.0.0 2023-05-30 23:00 UTC

This package is auto-updated.

Last update: 2024-08-30 01:39:45 UTC


README

概述

这个PHP库可以使用随机/假数据匿名化数据库转储文件,特别适用于在非实时环境中恢复实时数据库时的数据匿名化。这有助于降低如果非实时数据库被盗时暴露真实客户数据的风险。

工作原理

它读取本地存储(或从STDIN)中的DB转储文件,然后根据有关哪些列应被匿名化的说明,生成新的DB转储文件(或输出到STDOUT)。

它比尝试运行多个UPDATE请求到运行中的数据库要快得多,因为数据库需要处理很多事情,如检查某些列的唯一性、索引等。

安装

要安装此库以供使用,只需运行

composer require printi/db-dump-file-anonymizer

使用方法

此库导出一个名为anonymize-db-dump的可执行脚本。当需要库时,它安装在./vendor/bin/文件夹中。

可以通过以下方式调用此脚本

$ ./vendor/bin/anonymize-db-dump [OPTIONS]

以下是可以用的选项

  • -h--help:显示帮助
  • -i FILE--input=FILE:指定输入文件(MySQL的转储文件)
  • --stdin:从STDIN读取输入
  • -o FILE--output=FILE:指定输出文件
  • --stdout:将输出写入STDOUT
  • -m MODIFICATIONS--modifications=MODIFICATIONS:指定预期的修改的JSON
  • -f FILE--modifications-file=FILE:指定包含预期修改的JSON文件
  • -l LOCALE--locale=LOCALE:指定Faker使用的区域设置
  • -q--quiet:省略消息
  • -r SIZE--read-buffer-size=SIZE:指定读取缓冲区大小(例如:100,1KB,1MB,1GB)
  • -w SIZE--write-buffer-size=SIZE:指定写入缓冲区大小(例如:100,1KB,1MB,1GB)

此库使用Faker生成假(匿名)数据。您需要检查库以查看格式化程序、格式化程序的参数和区域设置的可用选项。

简单示例

$ php ./vendor/bin/anonymize-db-dump -i ./sample/dump.sql -o ./sample/dump.out.sql -f ./sample/modifications.json -l pt_BR

上面的示例将读取文件./sample/dump.sql,然后使用文件./sample/modifications.json中指定的修改说明,以及使用区域设置pt_BR(巴西葡萄牙语)来生成带有本地化的假数据,生成修改后的转储文件./sample/dump.out.sql

如果您想将修改后的转储文件输出到STDOUT,可以将-o ./sample/dump.out.sql替换为--stdout。此选项很有用,如果您不想存储修改后的转储文件,而是直接使用修改后的转储文件进行数据恢复,如下面的示例所示。

$ php ./vendor/bin/anonymize-db-dump -i ./sample/dump.sql --stdout -f ./sample/modifications.json -l pt_BR | mysql -uroot -proot -h localhost -D dbname

如果您想从STDIN生成修改后的转储文件,可以将-i ./sample/dump.sql替换为--stdin。此选项很有用,如果您直接从mysqldump获取转储文件,如下面的示例所示。

$ mysqldump ... | php ./vendor/bin/anonymize-db-dump --stdin --o ./sample/dump.out.sql -f ./sample/modifications.json -l pt_BR

修改的JSON指定

用于指定转储文件修改的JSON使用此结构

{
  "<TABLE_NAME>": {
    "<COLUMN_POSITION>": {
      "quote": <BOOLEAN_VALUE>,
      "format": <STRING_VALUE>,
      "args": <ARRAY_OF_ARGS>,
      "unique": <BOOLEAN_VALUE>,
      "optional": <BOOLEAN_VALUE>,
      "optional_weight": <FLOAT_VALUE>,
      "optional_default_value": <VALUE>
    }
  }
}

基本上,我们需要指定表名,然后指定每个表的列位置(从位置1开始),然后指定列的说明。

“quote”选项用于指示值是否应该用引号括起来(true)或不用(false)。例如,数值不需要使用引号。

“format”选项用于根据Faker格式化器指定列的格式。

“args”选项用于指定调用指定格式时使用的参数数组。

“unique”选项用于指定列是否唯一,以及该列在该表中不应重复(可能在其他列或其他表中重复)。

“optional”选项用于指定列是否为可选。当列是可选时,库可能会选择字段的默认值(如果未指定默认值,则使用NULL)。

“optional_weight”用于指定有空值的可能性。值0.0表示默认值始终被使用,1.0表示默认值永远不会被使用,0.2表示有20%的概率使用默认值。

“optional_default_value”用于指定默认值。

修改示例

{
  "customers": {
    "2": {
      "quote": true,
      "format": "firstName"
    },
    "3": {
      "quote": true,
      "format": "lastName"
    },
    "4": {
      "quote": true,
      "format": "email",
      "unique": true
    },
    "5": {
      "quote": true,
      "format": "phoneNumber",
      "optional": true,
      "optional_weight": 0.9,
      "optional_default_value": null
    },
    "6": {
      "quote": true,
      "format": "lexify",
      "unique": true,
      "args": [
        "TEST?????????"
      ]
    }
  }
}