內部做法

外包工程師的電腦裡會有你的客戶個資嗎?我們的開發環境只用假資料:Seeder 一鍵產生 5,000 筆模擬訂單,真的要用正式資料除錯,一律先遮罩 14 個個資欄位、7 天後自動刪除

2026.11.07 · 31 次瀏覽
外包工程師的電腦裡會有你的客戶個資嗎?我們的開發環境只用假資料:Seeder 一鍵產生 5,000 筆模擬訂單,真的要用正式資料除錯,一律先遮罩 14 個個資欄位、7 天後自動刪除
“

很多外包團隊為了方便,直接把正式資料庫匯出到工程師筆電。公開 ScriptWalker 的開發環境資料做法:假資料 Seeder、遮罩流程、目錄結構與設定範例,以及這個做法的代價、不適合的情境和給其他團隊的建議。 ”

分享:

直接答案:在我們的專案裡不會有。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 工程師,也歡迎來信聊聊加入我們。

分享: