Every role change meant tickets, code reviews, testing, and a deployment cycle. Adding a single read-only user could drag into days. Mistakes slipped through. Over-permissioned accounts became a risk we tolerated because the alternative was slower shipping.
Then we broke it down to the smallest level possible—granular database roles. Instead of assigning blanket privileges, each role mapped to the exact permissions needed for just that job. No more catch‑all “admin” roles for convenience. No more manual privilege edits in production.
The change was immediate. We cut database permissions work by more than half. New team members could get precise access in minutes. Audit logs made sense at a glance. Engineers stopped worrying about breaking least‑privilege rules and started focusing on features.