Audit Log di MySQL: Cara Melacak Perubahan Data dan Aktivitas Pengguna

Audit log adalah fitur penting dalam manajemen database yang memungkinkan administrator melacak perubahan data dan aktivitas pengguna. Dengan audit log, Anda dapat mengetahui siapa yang mengakses database, perintah SQL apa yang dijalankan, serta kapan dan dari mana aktivitas tersebut terjadi.
1. Apa Itu Audit Log di MySQL?
Audit log adalah catatan aktivitas dalam database yang mencatat setiap perintah SQL yang dieksekusi, termasuk SELECT, INSERT, UPDATE, DELETE, dan DDL (Data Definition Language) seperti CREATE dan DROP.
Mengapa Audit Log Penting?
✅ Keamanan – Mendeteksi akses tidak sah dan upaya peretasan.
✅ Pemantauan Aktivitas – Melihat siapa yang mengubah data dan kapan.
✅ Kepatuhan Regulasi – Memenuhi standar keamanan seperti GDPR, HIPAA, dan PCI-DSS.
✅ Troubleshooting – Menelusuri masalah yang terjadi akibat perubahan data.
2. Mengaktifkan Audit Log di MySQL
Secara default, fitur audit log tidak diaktifkan di MySQL Community Edition. Namun, pada MySQL Enterprise Edition, MySQL menyediakan MySQL Enterprise Audit Plugin.
Jika Anda menggunakan MariaDB, fitur audit log sudah tersedia tanpa memerlukan lisensi tambahan.
Langkah 1: Mengaktifkan Plugin Audit Log
Jalankan perintah berikut di MySQL:
INSTALL PLUGIN audit_log SONAME 'audit_log.so';
Cek apakah plugin berhasil diaktifkan:
SHOW PLUGINS WHERE Name = 'audit_log';
Langkah 2: Konfigurasi Audit Log
Audit log dapat dikonfigurasi menggunakan variabel di my.cnf
atau my.ini
:
plugin-load-add=audit_log.so
audit_log_format=JSON
audit_log_file=/var/log/mysql_audit.log
audit_log_policy=ALL
- audit_log_format=JSON → Output dalam format JSON untuk analisis lebih lanjut.
- audit_log_policy=ALL → Mencatat semua aktivitas pengguna.
Setelah mengedit konfigurasi, restart MySQL:
systemctl restart mysql
3. Melacak Aktivitas Pengguna dengan Audit Log
Setelah audit log diaktifkan, MySQL akan mulai mencatat aktivitas pengguna ke dalam file audit log.
Contoh Log dalam Format JSON
Setiap perintah SQL yang dijalankan akan tercatat dalam file audit seperti berikut:
{
"timestamp": "2024-02-19 10:23:45",
"id": 1,
"class": "general",
"connection_id": 12,
"user": "admin",
"host": "192.168.1.100",
"ip": "192.168.1.100",
"command": "QUERY",
"sql_command": "SELECT * FROM users"
}
Dari log ini, kita bisa melihat:
- Waktu eksekusi query (
timestamp
). - User yang menjalankan perintah (
user
). - IP sumber (
ip
). - Perintah SQL yang dijalankan (
sql_command
).
4. Menyaring dan Menganalisis Audit Log
Jika audit log menyimpan banyak data, kita bisa menggunakan tools seperti grep, awk, atau jq untuk menganalisisnya.
Mencari Semua Aktivitas dari Pengguna Tertentu
grep '"user": "admin"' /var/log/mysql_audit.log
Mencari Semua Perintah DELETE dalam Audit Log
grep '"sql_command": "DELETE"' /var/log/mysql_audit.log
Menggunakan jq untuk Parsing JSON
cat /var/log/mysql_audit.log | jq '.sql_command'
Mengatur Filter untuk Audit Log
Agar audit log tidak terlalu besar, kita bisa menyaring hanya aktivitas tertentu.
SET GLOBAL audit_log_policy = 'WRITE, EXECUTE';
WRITE
→ Hanya mencatat perintah yang mengubah data (INSERT, UPDATE, DELETE).EXECUTE
→ Hanya mencatat perintah eksekusi prosedur dan fungsi.
6. Menghapus atau Mengarsipkan Audit Log
Audit log bisa menjadi besar, sehingga perlu dikelola dengan baik.
Menghapus Audit Log Lama
Secara default, MySQL tidak akan menghapus log secara otomatis. Anda bisa menggunakan perintah berikut untuk menghapus file log secara manual:
rm /var/log/mysql_audit.log
Atau, gunakan cron job untuk mengarsipkan log lama setiap minggu:
0 0 * * 7 mv /var/log/mysql_audit.log /var/log/mysql_audit_$(date +\%Y\%m\%d).log