webhubworks/laravel-secure-db-dump
Composer 安装命令:
composer require webhubworks/laravel-secure-db-dump
包简介
Allows you to dump your db and anonymize its content.
README 文档
README
Call artisan secure-db-dump:run to export data based on the following config.
Note
The original database is never modified. It is only read (dumped); all anonymization happens on the separate temp_secure_db_dump database.
The command performs these steps:
- Setup – resolves the source DB connection (
db_connectionconfig, falls back to default), the storagedisk, and builds the dump file paths ({database}_{Ymd_His}.sql.gz). - Dump original database – exports the source DB via
spatie/db-dumper(gzip-compressed) tooriginal_dump_*.sql.gzon the configured disk. - Setup temp database – runs
CREATE DATABASE IF NOT EXISTS temp_secure_db_dump, registers it as a runtime connection, and switches the default connection to it. - Import dump – pipes the original dump through
gunzip | mysqlintotemp_secure_db_dump, then truncates any tables listed inignore_tables. - Anonymize – iterates the configured
anonymize_fieldstable-by-table, applying eachAnonymizerConfig(fakerorstatic, optionalwherefilters) viaUPDATEstatements on the temp DB. After every row's field rules, any configuredrow_hookscallables for that table are invoked (see Row hooks). - Dump secure database – exports
temp_secure_db_dump(gzip-compressed) tosecure_dump_*.sql.gz. Schema is omitted whenonly_contentis enabled. - Clean up – drops
temp_secure_db_dump(skipped on local env; falls back to dropping individual tables ifDROP DATABASEfails). - Prompt – asks whether to delete the original dump file, then prints the path to the secure dump.
Use --only-anonymize to skip steps 2, 4, 6, 7 and 8 and just (re-)anonymize an already-imported temp_secure_db_dump.
Outcome:
- Source database: read-only (dumped, never modified).
temp_secure_db_dump: created, populated, mutated, then dropped (kept around on local env for inspection).- Files written to the configured disk (default
local):original_dump_{database}_{timestamp}.sql.gz(optionally deleted at the end) andsecure_dump_{database}_{timestamp}.sql.gz(the final anonymized dump).
DDEV
In case you get a permission error when trying to CREATE or DROP a database, add this post-start hook to your .ddev/config.yaml:
... hooks: post-start: - exec: mysql -uroot -proot -e "GRANT ALL ON *.* TO 'db'@'%'; FLUSH PRIVILEGES;" service: db
Config
Publish the config file via artisan vendor:publish --tag=secure-db-dump-config.
Anonymize fields
This package uses Faker to anonymize fields. You can find the available formatters/methods here: https://fakerphp.org/formatters/
Per field you want to anonymize you have to define the field and a type. Possible values are: faker or static.
Type: static
You will need to provide a value for the field.
Type: faker
You will need to provide a method and optionally args (an array) for the Faker method.
Examples
... 'anonymize_fields' => [ # Specify the table name 'users' => [ # This will run $faker->name() for the 'name' field AnonymizerConfig::make() ->field('name') ->type('faker') ->method('name'), # This will run $faker->email() for the 'email' field AnonymizerConfig::make() ->field('email') ->type('faker') ->method('email'), # This will set the 'password' field to a static value AnonymizerConfig::make() ->field('password') ->type('static') ->value('$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi'), # You can also add (multiple) where conditions. AnonymizerConfig::make() ->field('some_field') ->type('faker') ->method('sentence') ->where('some_field', fn($value) => $value === 'some_value'), ->where('some_other_field', fn($value) => ! str($value)->endsWith('@webhub.de')), ], 'cars' => [ # This will run $faker->regexify('LG [A-Z]{2} [0-9]{2,4}') for the 'licence_plate' field AnonymizerConfig::make() ->field('licence_plate') ->type('faker') ->method('regexify') ->args(['LG [A-Z]{2} [0-9]{2,4}']), ], ], ...
Row hooks
anonymize_fields covers per-field replacements only. When you need logic that goes beyond replacing a single column — for example inserting related records, reusing one generated value across several tables, or any cross-row coordination — register a row hook under the row_hooks config key.
Each hook is a callable(\Faker\Generator $faker, object $row): void registered against a table. The runner iterates the table's rows once and, for each row, first applies every matching anonymize_fields rule and then invokes every registered hook in order. The $row passed to a hook is the value read from the cursor (pre-anonymization); to read freshly anonymized values, re-query the row from the temp database, e.g. DB::table('projects')->where('id', $row->id)->first().
A table may appear in row_hooks without any anonymize_fields entry — the hook will still fire for every row in that table.
Like anonymize_fields, row_hooks accepts either an inline array or a fully qualified class name. The class must be invokable and return the same array shape.
Example
For each projects row, generate a unique 4-digit number, create a fresh cost_centers record titled "{number} - {project title}", and attach it to the project:
use Faker\Generator; use Illuminate\Support\Facades\DB; use Illuminate\Support\Str; 'row_hooks' => [ 'projects' => [ function (Generator $faker, object $row): void { $project = DB::table('projects')->where('id', $row->id)->first(); do { $number = (string) random_int(1000, 9999); } while (DB::table('cost_centers')->where('number', $number)->exists()); $costCenterId = (string) Str::uuid(); DB::table('cost_centers')->insert([ 'id' => $costCenterId, 'cost_center_group_id' => DB::table('cost_center_groups')->value('id'), 'number' => $number, 'title' => "{$number} - {$project->title}", 'created_at' => now(), 'updated_at' => now(), ]); DB::table('projects') ->where('id', $row->id) ->update(['cost_center_id' => $costCenterId]); }, ], ],
webhubworks/laravel-secure-db-dump 适用场景与选型建议
webhubworks/laravel-secure-db-dump 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 80 次下载、GitHub Stars 达 0, 最近一次更新时间为 2025 年 05 月 28 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「laravel」 「webhubworks」 「secure-db-dump」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 webhubworks/laravel-secure-db-dump 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 webhubworks/laravel-secure-db-dump 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 webhubworks/laravel-secure-db-dump 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
This package houses a generated API client to interact with the Weclapp API.
Alfabank REST API integration
This is my package laravel-unusual-login
Laravel package for Accurate Online API integration.
Shared RCX Laravel DataTables UI and configuration helpers.
Boot a Laravel project on any machine with one command: app:serve installs missing tools (PHP, Node, Composer, Herd, Docker), creates .env, sets up the database, runs migrations, builds assets, starts a queue worker and serves via Herd, Sail or artisan serve; app:down cleanly stops everything it sta
统计信息
- 总下载量: 80
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 18
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-05-28