Episode ini mengatur siapa yang boleh mengakses apa di Vitess: user dan privileges MySQL, pertimbangan akses row dan column-level, audit logging untuk compliance, serta pemisahan akses aplikasi dan admin tools.

Keamanan tidak berhenti di enkripsi. Setelah kalian mengunci jalur transport di episode 12, pertanyaan berikutnya: siapa yang boleh melakukan apa? Tidak semua user harus bisa DROP TABLE, dan tidak semua query harus dicatat. Episode 13 membahas model akses dan jejak audit di Vitess — lapisan yang menentukan siapa bisa masuk dan apa yang bisa mereka lakukan.
Roadmap episode 13: user dan privileges MySQL, akses row dan column-level, audit logging, lalu pemisahan akses aplikasi dan admin tools.
Model akses Vitess bertumpu pada user MySQL. Setiap user punya grants: tabel mana yang boleh dibaca, tabel mana yang boleh ditulis, dan operasi admin apa yang boleh dijalankan. Kunci untuk mengelola ini dengan aman: buat user dengan prinsip least privilege.
Beberapa peran yang biasa dipakai:
SELECT, INSERT, UPDATE, DELETE pada tabel aplikasi. Tidak butuh DDL.ALTER, CREATE, DROP, hanya dipakai saat migrasi.SELECT, untuk reporting.CREATE USER 'appuser'@'%' IDENTIFIED BY 'rahasia'
GRANT SELECT, INSERT, UPDATE, DELETE ON commerce.* TO 'appuser'@'%'Perintah GRANT di atas memberi appuser kemampuan tulis-baca tanpa hak DDL. Setiap user sebaiknya punya password berbeda dan dirotasi berkala.
Info
VTGate berkomunikasi ke VTTablet dengan kredensial khusus (misal vt_appuser). Aplikasi tidak pernah berinteraksi langsung dengan MySQL shard — semua query lewat VTGate. Pastikan user aplikasi tidak punya hak untuk terhubung langsung ke tablet.
Terkadang membatasi per tabel tidak cukup — kalian butuh membatasi per baris atau per kolom.
email atau phone. MySQL mendukung ini lewat views atau kolom VIRTUAL yang disensor. Buat view yang hanya menampilkan kolom aman, lalu beri grant ke view itu saja.WHERE tenant_id = ... dan memaksa akses lewat view.CREATE VIEW public_users AS
SELECT user_id, name FROM usersCREATE VIEW di atas menampilkan hanya kolom user_id dan name, menyembunyikan email dan data sensitif lain. Beri grant ke view ini untuk user reporting:
mysql -h 127.0.0.1 -P 15306 -e "GRANT SELECT ON commerce.public_users TO 'readonlyuser'@'%'"Perintah mysql -h 127.0.0.1 -P 15306 mengeksekusi SQL via VTGate. Dengan pola view, kontrol akses bisa ditegakkan di level database, bukan hanya di aplikasi.
Warning
Di keyspace sharded, view yang mengandalkan join lintas shard bisa mahal. Untuk row-level access di workload sharded, lebih baik enkapsulasi aturan akses di aplikasi atau gunakan pola tenant column yang sudah dipetakan ke sharding key.
Audit menjawab pertanyaan: siapa melakukan apa, kapan, dan dari mana. Untuk compliance (seperti PCI-DSS atau data protection), jejak akses data sensitif biasanya wajib. Vitess menyediakan beberapa lapis audit:
Mengaktifkan audit log MySQL lewat plugin audit_log di konfigurasi MySQL:
audit_log=ON
audit_log_file=/var/log/mysql/audit.log
audit_log_format=JSONBaris audit_log=ON mengaktifkan plugin audit MySQL. Log JSON mencatat user, query, dan waktu — bahan dasar untuk investigasi dan compliance report.
Untuk memantau siapa yang sedang terhubung:
SELECT user, host, db, command FROM information_schema.processlistPerintah SELECT ... FROM information_schema.processlist menampilkan sesi aktif — cara cepat melihat siapa yang sedang terhubung dan melakukan apa.
Prinsip penting: aplikasi dan admin tidak boleh memakai jalur yang sama. Pemisahan ini mencegah aplikasi yang ter-compromise mengakses alat admin, dan mencegah query aplikasi mengganggu operasi.
Pola pemisahan yang direkomendasikan:
vtctlclient ke vtctld, yang sebaiknya tidak terekspos publik dan hanya bisa diakses dari jaringan internal atau VPN.RDONLY.kubectl exec -it deploy/vtctld -- vtctlclient \
-server localhost:15999 ListAllTabletsvtctlclient ListAllTablets dijalankan dari dalam Pod vtctld — akses admin tidak pernah keluar dari cluster, mengurangi permukaan serangan.
Success
Rumus pemisahan: aplikasi hanya VTGate, admin hanya vtctld, reporting hanya tablet RDONLY. Setiap jalur punya user, kredensial, dan jaringan terisolasi sendiri. Jika satu jalur bocor, dua lainnya tetap aman.
Pada episode 13 ini kalian sudah mengatur akses dan audit di Vitess: user dan privileges dengan prinsip least privilege, pembatasan akses kolom dan baris lewat views, audit logging untuk compliance, serta pemisahan jalur aplikasi, admin, dan reporting.
Inti yang harus dibawa pulang:
Di episode 14 berikutnya kita naik ke skala global: multi-region dan disaster recovery — geo-sharding, replikasi multi-region dan read locality, strategi DR, serta perencanaan global failover. Sampai jumpa!