owenmelbz / forget-db
一个简单的GDPR灵感的工具,用于匿名化机密数据库数据。
Requires
- php: ^7.1.3
- ext-pdo: *
- fzaninotto/faker: ^1.7
- illuminate/database: ^6.0
- josegonzalez/dotenv: ^3.2
- knplabs/github-api: ^2.8
- laravel/helpers: ^1.1
- php-http/guzzle6-adapter: ^1.1
- symfony/yaml: ^4.0
Requires (Dev)
- dms/phpunit-arraysubset-asserts: ^0.1.0
- laravel-zero/framework: ^6.0
- phpunit/phpunit: ^8.2
- squizlabs/php_codesniffer: ^3.2
- dev-master
- 1.0.2
- 1.0.1
- 1.0.0
- 0.1.0
- 0.0.16
- 0.0.15
- 0.0.15-beta
- 0.0.14
- 0.0.13
- 0.0.12
- 0.0.11
- 0.0.10
- 0.0.9
- 0.0.8
- 0.0.7
- 0.0.6
- 0.0.5
- 0.0.4
- 0.0.3
- 0.0.2
- 0.0.1
- dev-dependabot/composer/guzzlehttp/guzzle-6.5.8
- dev-dependabot/composer/guzzlehttp/psr7-1.8.5
- dev-dependabot/composer/league/flysystem-1.1.4
- dev-dependabot/composer/illuminate/database-6.20.26
This package is auto-updated.
Last update: 2024-09-21 22:46:43 UTC
README
这是一个简单的(有点)命令行工具,使用PHP 7.4和Laravel Zero以及Faker编写,可以帮助您在数据库中匿名化/假名化数据,以支持保护敏感信息或根据GDPR符合性保护人们的“被遗忘权”。
此工具允许您连接到mysql、postgres、sqlite或sqlserver,并用随机数据替换定义的信息,以允许您保持统计/关系/操作审计等。
它使用一个简单的yaml配置文件来定义覆盖条件,您想覆盖的字段,以及用什么来覆盖它们。
安装
我建议在您的系统上全局安装此工具
composer global require -W owenmelbz/forget-db
或者您可以使用curl安装此工具
curl -L https://github.com/OwenMelbz/forget-db/raw/master/builds/forget-db
chmod +x forget-db
mv ./forget-db /usr/local/bin/forget-db
forget-db update # optional - but will make sure your binary is up to date
配置
要生成一个新的配置,请从任何位置运行 forget-db new
这将引导您生成一个示例配置文件。
这将生成一个基本配置文件,看起来像这样
table_one: key: user_id conditions: ['where user_id != 1', 'or user_email LIKE "%@%"'] columns: { user_name: name, user_email: email } table_two: key: user_id columns: { user_name: name, user_email: email } table_three: key: user_id conditions: 'table_two.user_id = 1' joins: 'table_two on table_two.user_id = table_three.table_two_id' columns: { user_name: name, user_email: email }
属性
配置文件中的每个顶级项都是一个数据库表,例如 table_one
第一个 必需 属性是 key
,这非常重要,因为它定义了用于更新查询的列,并且很可能是唯一的。
第二个 必需 属性是 columns
,这是一个列名数组,其值设置为Faker方法,您可以在Faker生成器这里获取完整列表 - 大多数都很容易记住,例如 name, email, company
等。您还可以使用参数化格式化程序,如 regexify
。
第一个 可选 属性是 conditions
,如果需要限制使用,则应是一个包含SQL子句的数组,例如,如果您只需要user_id 1忘记,则可以添加 where user_id = 1
。您应该能够有多个条件,这些条件将传递到Laravel的 whereRaw
方法中,因此如果您需要更复杂的查询,请查看那些文档。
第二个 可选 属性是 joins
,这可以是一个字符串或包含连接的数组,这些连接将用于伴随条件,它采用以下格式的简单连接查询 joined_table on joined_table.column = other_table.column
,您可以使用修饰符系统使用连接类型前缀表,例如 left:tablename on...
这将传递到Laravel的 leftJoin()
、rightJoin()
和 join()
函数中。
修饰符
最近我们引入了向列定义中添加修饰符的功能,目前只有一个。要使用修饰符,只需在Faker方法前加上 modifier:
即可创建类似于 modifier:email_address
的东西
用法
配置完成后,您可以运行 forget-db forget ./path/to/config.yml
。向导将要求您提供连接细节,然后开始清理。如果您在当前工作目录下名为 .env
的文件中指定了数据库连接参数,这些值将被代码自动使用。查看 .env.example
以了解可以通过这种方式配置的设置。请注意,在交互模式下,运行时使用的环境(使用 --env
开关指定)会影响默认值。在非交互模式下,所有是/否问题默认为是,无论环境设置如何。要运行非交互模式,请使用 -n
开关(适用于脚本运行)。
命令完成后,您将看到有关操作成功与否的一些输出(根据需要提供详细的错误消息)。代码在成功时返回 0
退出代码,在失败时返回 1
。
模拟运行
我们还没有完整的模拟运行系统,但是您可以通过在命令后指定 --dry
参数来预览选择数据集的查询,以及找到的数据表,例如 forget-db forget ./config --dry
。这将仅对您的数据库运行“选择”操作,而不会写入任何更改!您将看到类似以下内容:
🧠 forget-db :: 2 rows found to process.
🧠 forget-db :: Query run... select `users`.`id`, `users`.`email`, `users`.`password` from `users`
+----+-------------------------+------------------+
| id | email | password |
+----+-------------------------+------------------+
| 1 | arvel.bradtke@auer.com | 371817583255573 |
| 2 | remington54@volkman.org | 6011543368953199 |
+----+-------------------------+------------------+
模拟运行限制
- 它不会显示您运行
forget
后数据将看起来如何 - 它不会显示将要运行的更新命令
警告 - 进行模拟运行时,请记住它将输出到您的终端,因此如果您正在处理敏感数据,请确保您采取了正确的预防措施!
警告/注意
- 由于语法和Laravel要求,运行代码需要PHP 7.1+
- 没有完整的模拟运行支持,我建议您首先在临时数据库上测试此功能,或使用
--dry
参数测试您的条件。 - 运行此工具的系统必须连接到数据库服务器(可能需要设置相应的防火墙规则和ACL)。
- 为了保持最佳的服务器兼容性,更新不是批量进行的,而是逐个进行的,因此请确保您了解您的服务器上是否存在任何行/表锁定。
- 对于大型数据集,模拟运行可能会根据您本地PHP环境中的资源限制而崩溃。在交互模式下,如果需要检索超过50条记录,代码将询问您是否继续。