直接答案:在我們的專案裡不會有。ScriptWalker 的開發環境只用 Seeder 產生的假資料,一個指令產出 5,000 筆模擬訂單;真的要用正式資料除錯時,先在伺服器端遮罩 14 個個資欄位,複本 7 天後自動刪除。
有一位客戶在接手前一家外包商的系統時發現,對方 4 位工程師的筆電裡都有完整的正式資料庫,裡面是 2 萬筆會員姓名、電話與地址。其中一位已離職,沒人知道那份檔案還在不在。依個人資料保護法,委託外包處理個資時,客戶仍要負監督責任,出事時先被追究的是品牌本身。
我們的做法:開發環境預設不碰正式資料
一句話:在 ScriptWalker(台灣 Laravel/Flutter 客製化開發工作室),假資料是預設,正式資料是例外,例外要申請、遮罩、到期刪除。
流程是:git clone → make setup 啟動 Docker → php artisan migrate --seed 產生假資料 → 開始開發。需要正式資料時改走:開單申請 → 唯讀備份 → 伺服器端遮罩 → 自動檢查 → 加密傳輸 → 7 天後刪除。
為什麼這樣做:便利與風險的取捨
我們接受多花一點工時,換取「工程師筆電遺失也不會外洩個資」。
- 筆電是最弱的一環:伺服器有防火牆與存取紀錄,筆電會被帶去咖啡廳、會遺失、會被拿去修。
- 假資料讓新人第一天就能開發:不用等誰授權資料庫帳號,新人約 1 小時就能跑起整個系統。
- 測試結果可重現:Seeder 固定亂數種子,每個人拿到的資料一樣,bug 才重現得了。
- 例外留紀錄:每次動用正式資料都有工單,客戶查得到誰、何時、為什麼。
具體執行:Seeder、遮罩指令與目錄結構
核心是 3 個東西:Factory 定義假資料長相、Seeder 決定數量、遮罩指令處理例外。
- 假資料用 Laravel 的 Seeder 與 Factory,搭配 Faker 的 zh_TW 語系產生中文姓名與地址。
- 本機環境用 Docker Compose 跑 MySQL、Redis 與 Mailpit,寄出的信不會真的到客戶信箱。
- GitHub Actions 每次 PR 都從空資料庫跑一次
migrate --seed,確保 Seeder 沒壞。 - 遮罩指令
php artisan data:mask只能在正式環境側執行,設定檔列出要替換的欄位。
database/
factories/ OrderFactory.php MemberFactory.php
seeders/ DemoSeeder.php # 300 會員、5,000 訂單、12 個月
config/mask.php
'members' => ['name','phone','email','address','birthday','line_id'],
'orders' => ['receiver_name','receiver_phone','receiver_address','invoice_carrier'],
'tickets' => ['contact_name','contact_phone','message','attachment_url'],
這個做法的代價
老實說,它讓每個專案多出一些固定成本。
- 每個新資料表都要寫 Factory,平均多 1–2 小時。
- 資料分布與正式環境不完全一樣,少數效能問題要到測試機才看得到。
- 遮罩流程要排隊,急著除錯時會慢 30–60 分鐘。
- 客戶初期要配合提供「資料長什麼樣」的範例說明。
不適合什麼情境
這套流程不是每種專案都划算。
- 純形象網站、沒有會員與訂單資料,寫 Seeder 的效益很低。
- 資料模型每週大改的早期原型,Factory 會一直跟著重寫,先用少量手寫範例即可。
客戶為什麼該關心
這直接影響你的法律風險、交接成本與測試品質。
| 面向 | 直接匯出正式資料 | 假資料+遮罩例外 |
|---|---|---|
| 個資外洩風險 | 每台筆電都是風險點 | 只有遮罩後的短期複本 |
| 新人上手時間 | 等授權 1–3 天 | 約 1 小時 |
| 換廠商時 | 不知道資料散在哪 | 有完整匯出與刪除紀錄 |
| 額外工時 | 0 | 每專案約 1–2 天 |
如果你也想這樣做:給其他團隊的建議
從最便宜的規則開始,不用一次做到完整。
- 先立一條規則:正式資料不准存到個人電腦,比任何工具都有效。
- Seeder 從最常用的 3 張表開始,例如會員、訂單、商品。
- 固定亂數種子,讓每個人的假資料一致。
- 遮罩欄位清單交給客戶確認,他們最知道哪些欄位敏感。
我們在哪些客戶身上用過
一家有 1.8 萬名會員的保養品電商,上線 2 年內換過 3 位工程師,沒有任何一份正式資料離開伺服器;一家連鎖補習班的家長資料,則是在除錯成績匯入問題時,只匯出遮罩後的 2 張資料表,7 天後自動刪除。
常見問題 FAQ
開發時用假資料,會不會測不出真實問題?
大部分不會。Seeder 依正式資料的分布產生假資料,例如訂單金額區間與商品數量;只有少數資料相關的 bug 需要遮罩後的正式資料。
遮罩後的資料還算個資嗎?
若無法再識別特定個人,風險大幅降低。我們把姓名、電話、地址等改成假值,並刪除可回推的組合欄位。
客戶可以要求檢查這個流程嗎?
可以。每次匯出正式資料都有申請紀錄、遮罩報告與刪除時間,客戶可隨時調閱。
小專案也需要做到這樣嗎?
基本的 Seeder 與「不匯出正式資料」規則都需要,約多 1–2 天工時;遮罩流程可以等到真的需要時再建。
行動呼籲
想確認你的外包商怎麼處理個資,或想用這套方式合作,預約 30 分鐘免費諮詢;如果你是重視資料安全的 Laravel 或 Flutter 工程師,也歡迎來信聊聊加入我們。
- Email:[email protected]
- 電話:0916-224-047
- LINE:@ufv9089p