The One-Sentence Dilemma
An e-commerce brand doing NT$18M a month with 320,000 member records has order totals that will not reconcile. The outsourced engineer posts in the group chat: "Send me the live database connection, I will find it in ten minutes." Grant it, and someone you have never met holds the company's most sensitive asset. Refuse, and the project stalls three days. The COO granted it, then forgot to revoke it.
His mistake was treating it as a yes-or-no question. It is a tiering question.
Four Beliefs That Make You Relax Too Early
- An NDA makes it safe. An NDA is a remedy, not a control. With shared accounts you cannot even prove who leaked it.
- Read-only means no risk. One SELECT walks out with 320,000 names, phones and addresses. The line is not read versus write, it is reachable rows and columns. Read-only reduces corruption risk, not exfiltration risk.
- A VPN counts as an audit trail. A VPN logs who connected and when. An audit trail logs who, when, which table, how many rows. Without those three fields you cannot assign responsibility after an incident.
- No production data means no work gets done. Roughly 80% of tasks run fine on de-identified samples. Only data repair, performance tuning and non-reproducible intermittent bugs genuinely need production.
Contrarian view: most budgets go to blocking external intrusion, but the Verizon 2025 DBIR found third-party involvement in breaches doubled from 15% to 30% — mostly not sophisticated attacks, just access nobody cleaned up.
The Framework: Four Tiers Plus PARC
| Tier | Contents | Controls |
| L0 | Empty database plus schema | No approval, default for dev |
| L1 | Masked sample, 1,000–5,000 rows | Named account, no redistribution, destroyed at close |
| L2 | Read-only production snapshot | Bastion host, row-level audit log, 72 hr auto-expiry |
| L3 | Production write | Two-person review, pre-change backup, change window, single-task grant |
Four PARC questions. Every one you cannot answer drops you a tier.
- P — Purpose: Can an L1 sample finish the task? If yes, stop here.
- A — Attribution: Can you name a person if it goes wrong? Shared account means no, drop to L1.
- R — Reversibility: Is there a backup restorable within 15 minutes? If not, L3 is never granted.
- C — Compliance: Personal, payment or health fields? Then L2 and above must retain audit trails (Taiwan's PDPA Article 27; for EU residents see the processor obligations in GDPR Article 28).
Three Contrasting Scenarios
| 25-person e-commerce | 120-person manufacturer | 8-person health-tech | |
| Data profile | High confidentiality, low downtime cost | Low confidentiality, NT$60,000 per stopped line-hour | Special-category personal data |
| Centre of gravity | L1 | Standing L2 read-only | L0/L1 synthetic data |
| Deciding question | C — compliance | R — reversibility | P — purpose |
| L3 rule | 4 times a year max, Tuesday window only | Two-person review plus snapshot | Never; remote desktop screen-only |
Same framework, three completely different answers.
Hidden Costs You Already Pay Without Tiers
- Ad-hoc access requests: 0.5–1.5 hr per request on each side, about 48 hours a year at 24 requests
- Vendor idle time waiting for access: 3–5 days per project, at NT$15,000/day = NT$45,000–75,000
- Quarterly orphan-account sweep: 2 hr per quarter, 8 hours a year
- Retrofitting audit trails when your customer demands a supply-chain audit: 40–60 hours / NT$80,000–150,000
- Restoring and reconciling deleted production data: 16–40 hours per incident plus downtime
- An actual breach: the IBM 2025 Cost of a Data Breach Report puts the global average at USD 4.44M, with a mean 241 days to identify and contain
The build is cheap by comparison: a de-identified dataset is 16–24 hours once (NT$32,000–60,000), bastion host plus audit logging NT$1,200–3,000 a month. Most companies break even in year one.
Vendor Scorecard (12 dimensions, 0–2 each, max 24)
- Named individual accounts, no shared logins
- Access carries a default expiry (TTL)
- De-identification or synthetic data capability
- Audit trail captures who / what / when / rows
- Two-person review on production changes
- Backup restore drills at least quarterly
- Full-disk encryption and remote wipe on work devices
- Access revocation SLA on staff change, 24 hr or less
- Incident notification within 4 hr
- Subcontracting transparency: whether and to whom
- Certificate of data destruction at close
- Contract includes a data processing addendum (DPA)
Reading it: 0 = absent, 1 = present but manual, 2 = systematised and provable. Below 12, no production access at all; 18 or above qualifies for L2; only 21 or above earns L3.
Our Models, and Who We Are Wrong For
Each engagement model maps to a tier: Advisory needs only L0, we read schema and logs, not data; project work runs mainly on L1; monthly retainer gets standing L2 read-only; only full outsourcing reaches L3. Every account carries a default TTL, and we issue a destruction inventory within 7 days of close.
Where we are the wrong fit:
- Wanting a full production dump on our local machines "for convenience" — the most common origin of leaks
- Insisting on one shared root account with no audit logging
- Needing a formal HIPAA or PCI-DSS Level 1 attestation signature; use a certified provider
- Requiring 24/7 on-call SRE coverage with a 15-minute response
- No backups at all, and unwilling to spend two days building one before touching production
The 90-Day Playbook
- Day 0–7, inventory and classify: list every table, flag personal and payment fields, produce a tier mapping sheet. About 8 hours.
- Day 8–14, build the L1 sample: finish the masking script and a 3,000-row dataset; dev environments stop touching production from here.
- Day 15–30, bastion host live: stand up the L2 flow (form, approval, auto-provisioning, 72 hr expiry) and run one request end to end.
- Day 31–60, L3 rehearsal: one two-person-reviewed production change, one restore drill, measure actual restore time.
- Day 61–90, access health check: sweep orphan accounts, verify every TTL, sample 10 audit log entries, rerun the scorecard and record the change.
Decision Checklist
- ☐ Can you list every external production account in 5 minutes?
- ☐ Are any of them shared?
- ☐ Does each external account have an expiry date?
- ☐ Do you have a de-identified sample ready to hand over?
- ☐ Does the audit log record row counts?
- ☐ When was the last restore drill?
- ☐ Do production writes need a second approver?
- ☐ Does the contract include a DPA?
- ☐ Will you know within 24 hours if the vendor changes staff?
- ☐ Do you know whether they subcontract?
- ☐ Has access from the last closed project been revoked?
- ☐ If a leak happened tomorrow, could you name the account within 4 hours?
Three or more unanswered means you are running on trust, not on system.
Frequently Asked Questions
How long does a de-identified dataset take, and is it worth it?
16–24 hours to build, then refreshes automate down to about an hour. Against 3–5 days of vendor idle time per project (NT$45,000–75,000), it usually pays for itself on the first project.
What does it mean if a vendor refuses TTLs and audit logging?
Their internal process is still at the shared-account stage. Not necessarily malicious, but a low scorecard. Grant L1 only, observe three months, then adjust.
We have no DevOps. Can a small company run a bastion host?
Yes. Managed bastion services run NT$1,200–3,000 a month and take 4–6 hours to configure. Minimum version: a named account, query logging on, and a manual approval form — live in a day.
Will revoking access we already granted offend the vendor?
A professional vendor welcomes it — after an incident, only the party with an audit trail can prove they did not do it. Frame it as supply-chain audit prep and apply it to every vendor at once.
Which Tier Should You Grant?
Hesitating over handing out the production database password? Hold off. Send us your external account list for a free 30-minute consultation: we walk the PARC questions, score your current vendor on the 12-dimension card, and produce a tier mapping recommendation. Yours to use whether or not we work together.
- Email: [email protected]
- Phone: 0916-224-047
- LINE: @ufv9089p