brendantwhite / databasemask
使用 Faker 隐藏生产环境中的数据,以便在其他地方安全使用
Requires
- php: ^8.0
- illuminate/support: ^8.67|^9.0
Requires (Dev)
- laravel/pint: ^1.2
Suggests
- spatie/laravel-db-snapshots: Required for the dbm:backup and dbm:restore commands
README
使用 Faker 隐藏生产环境中的数据,以便在其他地方安全使用。
用例
是否曾想在你测试环境中使用 Laravel 项目生产数据库的副本?但你不能这样做,因为这存在安全风险?
现在,你可以获取生产数据库的副本,仅隐藏需要隐藏的值 - 名称、电话号码、电子邮件地址等,同时保持其他数据的完整性。
安装
从命令行运行
composer require brendantwhite/databasemask
配置
首先,确保为每个你想要隐藏的 Eloquent 模型类定义了模型工厂。
然后,在你的 Eloquent 模型类中添加一个 $masked
属性,指定你的模型上哪些属性应该被隐藏。
<?php // in app/Models/User.php /** * The attributes that should be masked by DatabaseMask. * * @var array */ protected $masked = [ 'name', 'email', 'password', ];
如果你有任何不需要隐藏的模型,也添加一个 $masked
属性,但让它成为一个空数组。
<?php // in app/Models/SomeOtherModel.php /** * The attributes that should be masked by DatabaseMask. * * @var array */ protected $masked = [];
使用
要隐藏你的数据,运行 php artisan dbm:mask
命令。这将遍历所有你的 Eloquent 模型,查找 $masked
属性。
-
如果
$masked
属性为空或空集合,则跳过该模型。 -
如果缺少
$masked
属性,将对该模型标记警告。 -
如果
$masked
属性不为空,但没有为该模型创建工厂,则返回错误。
但如果 $masked
属性包含字段名,并且已创建工厂,则将 $masked
属性中的字段替换为 Faker 值。其他字段保持不变。
备份和恢复
此包还包含对 Spatie 的优秀 laravel-db-snapshots 包的轻量级包装,以使备份和恢复更加容易。
要使用这些命令,你首先需要按照它们的安装说明安装 laravel-db-snapshots
。
然后,运行 php artisan dbm:backup
以在你的 snapshots
磁盘上创建数据库的备份文件。运行 php artisan dbm:restore
以选择一个备份文件并将其恢复到当前环境。
通常,你会从生产环境中备份,然后将其恢复到其他环境,然后在其他环境中隐藏这些数据。
如果你只想使用 dbm:mask
命令,则不需要安装 laravel-db-snapshots
。
测试 DatabaseMask
TODO: 编写一些测试。
免责声明
我不能,也不保证使用 DatabaseMask 会将你的数据 100% 匿名化。
我可以并且会尽最大的努力确保,当正确配置时,DatabaseMask 会从你的数据中删除可识别的个人身份信息。
然而,我不能保证此软件 100% 没有错误,我当然也不能保证你已正确配置它。所以请自行承担使用此软件的风险。
许可
此包是开源软件,许可协议为 MIT 许可证。