druidfi / gdpr-mysqldump

mysqldump 的替代品,可选择性地对数据库字段进行清理,以更好地符合 GDPR 标准。

1.2.6 2024-04-24 10:24 UTC

README

基于 machbarmacher/gdpr-dump 的分支

mysqldump 的替代品,可选择性地对数据库字段进行清理,以更好地符合 GDPR 标准。

它基于 ifsnop/mysqldump-php 库,原则上可以导出 PDO 支持的任何数据库。

使用方法

目前有两种处理数据的方式,第一种是通过操作服务器上实际运行的 SQL 查询(由 gdpr-expressions 路径提供),第二种是在生成导出之前替换列输出(由 gdpr-replacements 选项提供)。

$ ../vendor/bin/mysqldump drupal --host=mariadb --user=drupal --password=xxxxxxxx users_field_data --gdpr-expressions='{"users_field_data":{"name":"uid","mail":"uid","pass":"\"\""}}' --debug-sql
...
--
-- Dumping data for table `users_field_data`
--

/* SELECT `uid`,`langcode`,`preferred_langcode`,`preferred_admin_langcode`,uid as name,"" as pass,uid as mail,`timezone`,`status`,`created`,`changed`,`access`,`login`,uid as init,`default_langcode` FROM `users_field_data` */

INSERT INTO `users_field_data` VALUES (0,'en','en',NULL,'0','','0','',0,1523397207,1523397207,0,0,'0',1);
INSERT INTO `users_field_data` VALUES (1,'en','en',NULL,'1','','1','UTC',1,1523397207,1523397207,0,0,'1',1);

要混淆的字段通过 --gdpr-expressions 参数传递。请注意,我们使用 uid 表达式来满足唯一键。

不混淆的情况

$ ../vendor/bin/mysqldump drupal --host=mariadb --user=drupal --password=xxxxxxxx users_field_data --debug-sql
...
--
-- Dumping data for table `users_field_data`
--

/* SELECT `uid`,`langcode`,`preferred_langcode`,`preferred_admin_langcode`,`name`,`pass`,`mail`,`timezone`,`status`,`created`,`changed`,`access`,`login`,`init`,`default_langcode` FROM `users_field_data` */

INSERT INTO `users_field_data` VALUES (0,'en','en',NULL,'',NULL,NULL,'',0,1523397207,1523397207,0,0,NULL,1);
INSERT INTO `users_field_data` VALUES (1,'en','en',NULL,'admin','$S$Eb6kZl.9OFjoa69Z05pzUhaZJ6vpKaGZVpnjAxxLJ7ip0zOwanEV','admin@example.com','UTC',1,1523397207,1523397207,0,0,'admin@example.com',1);

使用 gdpr-replacements

这使用 Faker 进行大部分列清理。

目前,该工具会搜索 "gdpr-replacements" 选项,可以是命令行参数,也可以是 MySql 选项文件 的一部分。

"gdpr-replacements" 选项期望一个 JSON 字符串,其格式如下

{"tableName" : {"columnName1": {"formatter": "formatterType", ...}, {"columnName2": {"formatter": "formatterType"}, ...}, ...}

其中 formatterType 是以下之一

  • name - 生成一个名字
  • phoneNumber - 生成一个电话号码
  • userName - 生成一个随机用户名
  • password - 生成一个随机密码
  • email - 生成一个随机电子邮件地址
  • date - 生成一个日期
  • longText - 生成一个句子
  • number - 生成一个数字
  • randomText - 生成一个句子
  • text - 生成一个段落
  • uri - 生成一个 URI
  • clear - 生成一个空字符串

这会将指定列的值替换为 Faker 输出。

您还可以将替换映射保存到 JSON 文件中,并使用 --gdpr-replacements-file 选项使用它。

与 Drush 一起使用

请参阅 drush-gdpr-dumper

由于它模仿 mysqldump,因此可以与 drush、backup_migrate 以及任何使用 mysqldump 的工具一起使用。Drush 示例

$ export PATH=/var/www/html/vendor/bin:$PATH
$ which mysqldump
/var/www/html/vendor/bin/mysqldump
$ drush sql-dump --tables-list=users_field_data --extra-dump=$'--gdpr-expressions=\'{"users_field_data":{"name":"uid","mail":"uid","init":"uid","pass":"\\"\\""}}\' --debug-sql'

MySql 选项文件

您可以将 gdpr-expressions/replacement 选项设置在 mysql 选项文件中。它应出现在 [mysqldump] 部分。

例如,您可能有一个包含以下内容的 /etc/my.cnf

[mysqldump]
gdpr-replacements='{"fakertest":{"name": {"formatter":"name"}, "telephone": {"formatter":"phoneNumber"}}}'

状态和进一步开发

目前这是一个概念验证,旨在启动社区进程。特别是 --gdpr-expressions 选项既不易于人类编写,也扩展性不佳。这里我们可能需要更好的选项。

贡献者说明

  • 请注意,该项目遵循 PSR-2 格式。

待办事项

\druidfi\GdprDump\Util\Path 类是从 symfony/filesystem:5.4.0 包中复制的。当包 drupal/core-dev-pinned 允许 symfony/filesystem 新于 5.4 时,我们可以删除此类并使用 symfony/filesystem 代替。

致谢

其他信息

该项目可以在 Packagist 上找到:https://packagist.org.cn/packages/druidfi/gdpr-mysqldump