eaudeweb / gdpr-dump
mysqldump的替代品,可选地对数据库字段进行清理以提高GDPR合规性。
Requires
- bomoko/mysql-cnf-parser: ^0.0.2
- cweagans/composer-patches: ^1.6
- eaudeweb/mysqldump-php: ^2.8
- fakerphp/faker: ^1.20
- symfony/console: ^6.0 || ^5.0 || ^4.0 || ^3.4
- symfony/event-dispatcher: ~3.4|~4.0|~5.0|~6.0
Requires (Dev)
- phpunit/phpunit: ^8.1
This package is auto-updated.
Last update: 2024-09-04 15:56:28 UTC
README
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一起使用
由于它模仿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选项文件
您可以在mysql选项文件中设置gdpr-expressions/replacement选项。它应位于[mysqldump]
部分下。
例如,您可能有一个包含以下内容的/etc/my.cnf
[mysqldump]
gdpr-replacements='{"fakertest":{"name": {"formatter":"name"}, "telephone": {"formatter":"phoneNumber"}}}'
状态和进一步开发
目前这是一个概念验证,旨在激发社区过程。特别是--gdpr-expressions
选项既不便于人类编写,也扩展性不好。我们可能需要更好的选项。
贡献者说明
- 请注意,该项目遵循PSR-2进行格式化。