Pengauditan database MySQL

Topik ini menjelaskan pengauditan database Cloud SQL untuk MySQL dan Plugin Audit Cloud SQL untuk MySQL. Untuk menggunakan pengauditan database sekarang, lihat Menggunakan audit database MySQL.

Apa itu pengauditan database?

Pengauditan database memungkinkan Anda melacak tindakan pengguna tertentu dalam database, seperti update tabel, kueri yang telah baca, pemberian hak istimewa pengguna, dan lainnya. Pengauditan database berguna bagi organisasi yang memerlukan jejak aktivitas para penggunanya karena alasan keamanan atau untuk mematuhi berbagai peraturan keuangan, pemerintahan, dan ISO. Pengauditan database didukung untuk Cloud SQL untuk MySQL 5.7 dan 8.0.

Plugin Audit Cloud SQL untuk MySQL

Pengauditan database diaktifkan oleh Plugin Audit Cloud SQL untuk MySQL, atau cloudsql_mysql_audit. Plugin ini menggunakan MySQL audit API terbuka untuk memantau dan mencatat aktivitas di MySQL. Plugin mengirimkan log ke log audit Akses Data Cloud Logging. Log audit Akses Data dinonaktifkan secara default karena log audit dapat menjadi cukup besar. Anda harus secara eksplisit mengaktifkan log untuk menggunakan plugin.

Saat plugin aktif, aturan audit yang telah Anda buat akan diterapkan untuk membuat log audit untuk database. Saat plugin dinonaktifkan, tidak boleh ada log audit yang dibuat.

Untuk informasi selengkapnya tentang plugin MySQL, lihat Plugin MySQL Server.

Siapa yang menggunakan pengauditan database?

Ada tiga jenis pengguna yang terlibat dalam pengauditan database:

  • Administrator - Pengguna yang mengelola database. Administrator adalah pengguna audit yang bertanggung jawab untuk mengaktifkan dan menonaktifkan pengauditan pada instance dan untuk membuat pengguna baru. Mereka juga memberikan izin pengauditan kepada auditor. Administrator juga dapat membuat, menghapus, dan memperbarui aturan audit.
  • Auditors - Pengguna yang memiliki izin untuk membuat, menghapus, dan memperbarui aturan audit. Mereka diberikan akses oleh administrator.
  • Clients - Pengguna yang aktivitasnya diaudit melalui aturan audit, tetapi tidak mengaudit pengguna dan tidak memiliki hak istimewa administratif atau pengauditan sendiri. Akses mereka diatur oleh administrator.

Administrator dan auditor juga disebut sebagai pengguna audit.

Aturan audit

Audit database menggunakan aturan audit untuk menentukan kombinasi pengguna, database, objek, operasi, dan status yang akan memicu pembuatan log audit. Aturan audit berisi informasi berikut:

  • Id - ID aturan numerik otomatis. Setiap aturan audit memiliki ID audit yang otomatis ditetapkan saat aturan dibuat. ID audit tidak dapat diubah setelah dibuat.
  • Nama pengguna - Daftar pengguna dan/atau pola karakter pengganti yang dipisahkan koma. Anda dapat menggunakan tanda bintang (*) sebagai karakter pengganti untuk pengguna dan host. Gunakan tanda bintang sebagai akhiran, awalan, atau keduanya. Selain itu, pengguna dapat menggunakan karakter pengganti % hanya untuk host. Maksimumnya adalah 2048 karakter.
  • Dbname - Daftar nama database dan/atau pola karakter pengganti yang dipisahkan koma. Anda dapat menggunakan tanda bintang (*) sebagai karakter pengganti untuk pengguna dan host. Gunakan tanda bintang sebagai akhiran, awalan, atau keduanya. Maksimum 2048 karakter.
  • Objek: Daftar yang dipisahkan koma berisi nama objek database (tabel, fungsi, prosedur tersimpan, dll.) dan/atau pola karakter pengganti. Anda dapat menggunakan tanda bintang (*) sebagai karakter pengganti untuk pengguna dan host. Gunakan tanda bintang sebagai akhiran, awalan, atau keduanya. Maksimum 2048 karakter.
  • Operasi - Daftar operasi database yang dipisahkan koma. Plugin ini mendukung operasi grup (seperti DDL, DML, dll.), operasi tunggal (seperti update, hapus, dll.), dan karakter pengganti (*) untuk semua operasi. Lihat Daftar lengkap operasi yang didukung. Plugin ini juga mendukung grup operasi yang dapat Anda gunakan untuk mengaudit sebuah grup operasi. Maksimum 2048 karakter.
  • Op_result - Hasil operasi.

    • S untuk mengaudit operasi yang berhasil
    • U untuk mengaudit operasi yang gagal
    • B untuk melacak operasi yang berhasil dan tidak berhasil
    • E untuk membuat aturan eksklusif

Jenis-jenis operasi

Jenis operasi merupakan beberapa jenis aktivitas atau operasi yang dapat Anda audit di database:

  • DQL - Data yang telah dibaca dari database (yaitu, pernyataan SELECT)
  • DML - Menambahkan, menghapus, atau mengubah data
  • DDL - Membuat atau mengubah struktur objek database dalam database
  • DCL - Mengelola hak istimewa untuk pengguna di database
  • Show - Menjelaskan keberatan database atau memberikan status database
  • Call - Memanggil prosedur yang disimpan

Pertimbangan yang memengaruhi log audit

Cadangan

Ketika memulihkan instance dari cadangan atau pemulihan point-in-time (PITR), aturan audit juga melakukan roll back ke waktu pencadangan atau PITR. Hal ini terjadi karena aturan audit adalah bagian dari data yang disimpan dalam database, begitu juga target (pengguna dan objek) yang diaudit oleh aturan tersebut.

Replika baca

Aturan audit direplikasi secara otomatis dari instance utama ke replika bacanya. Pelanggan tidak dapat menambahkan, menghapus, atau mengubah aturan audit pada replika baca. Jika ingin mengubah aturan audit untuk replika, Anda perlu memperbarui aturan audit instance utama.

Jika memperbarui aturan log audit pada instance utama, Anda perlu memuat ulang aturan audit pada replika untuk memastikan aturan audit baru juga diperbarui pada replika baca. Perintah berikut memuat ulang aturan audit:

CALL mysql.cloudsql_reload_audit_rule(1)

Pengguna dapat mengaktifkan log audit pada replika secara terpisah dari instance utama. Setelah melakukan perubahan pada instance utama, Anda perlu menjalankan perintah memuat ulang atau memulai ulang instance replika agar aturan log audit menjadi efektif.

Ketersediaan database selama kegagalan log audit

Jika operasi audit gagal, Cloud SQL tidak akan menghentikan penyelesaian aktivitas database. Misalnya, saat instance kehabisan kapasitas disk dan Cloud SQL tidak dapat membuat log audit, database tetap memungkinkan pengguna menjalankan kueri baca, meskipun aktivitas ini biasanya akan menghasilkan log audit.

Instance hanya baca

Jika instance memiliki tanda read_only yang ditetapkan ke true, Anda tidak dapat menambahkan atau memperbarui aturan audit karena aturan tersebut disimpan di tabel. Sebelum membuat, memperbarui, atau menghapus aturan, Anda harus menghapus flag read_only.

Batasan dan masalah umum

Menerapkan log biner

Plugin Audit Cloud SQL untuk MySQL tidak kompatibel dengan log biner pada instance.

Dalam kasus tertentu, jika Anda mencoba menerapkan log biner saat Plugin Audit Cloud SQL untuk MySQL diaktifkan, instance database dapat mengalami error.

Jika ingin menerapkan log biner menggunakan utilitas mysqlbinlog, Anda harus menonaktifkan pengauditan database terlebih dahulu dengan menetapkan cloudsql_mysql_audit=OFF

Kecepatan penyerapan log

Sebelum Cloud SQL mengirim log audit ke Cloud Logging, log audit tersebut akan ditulis sementara ke disk instance, menggunakan kapasitas disk. Log diupload ke Cloud Logging dan dihapus dari disk dengan kecepatan 4 MB per detik. Saat beban dari pembuatan log melebihi kecepatan upload, instance akan mengalami peningkatan penggunaan disk, yang dapat menyebabkan database Anda kehabisan disk dan error. Bahkan jika peningkatan penyimpanan disk otomatis diaktifkan, peningkatan penggunaan disk akan meningkatkan biaya.

Saat menggunakan fitur ini, sebaiknya Anda:

  • Aktifkan peningkatan penyimpanan otomatis.
  • Memantau penggunaan disk secara keseluruhan. Anda tidak dapat memantau muatan dari pembuatan log secara terpisah. Gunakan metrik cloudsql.googleapis.com/database/disk/utilization di Metrics explorer.
  • Jika perlu, kurangi frekuensi pembuatan log dengan membatasi aktivitas database atau mengurangi audit.

Mengaudit operasi yang gagal

Jika aturan audit Anda menyertakan pengauditan untuk operasi yang gagal (op_result di ditetapkan ke U untuk operasi yang gagal atau B untuk operasi yang gagal dan berhasil), beberapa pengguna mungkin dapat meningkatkan beban instance database Anda yang berisi log audit dengan terus menjalankan operasi yang gagal. Jika kecepatan pembuatan log melebihi kecepatan penyerapan log, penggunaan disk yang tidak diinginkan dapat terjadi, sehingga ruang disk habis. Sebagai gantinya, ketika mengaudit operasi yang gagal:

  • Kontrol akses di tingkat instance.
  • Siapkan sistem pemantauan atau pemberitahuan untuk peningkatan abnormal pada log operasi yang gagal.

Aturan audit

Anda tidak dapat membuat lebih dari total 1000 kombinasi aturan audit per instance database. Kombinasi aturan audit adalah kumpulan unik dari pengguna, database, objek, dan operasi. Misalnya, aturan audit mengaudit user1,user2, db1,db2, table1,table2, select,delete menghasilkan kombinasi 2 x 2 x 2 x 2 = 16. Pembuatan atau pembaruan aturan audit akan gagal jika jumlah total kombinasi aturan audit melebihi 1000.

Operasi yang tidak didukung

Saat ini operasi berikut tidak didukung.

  • Fungsi berikut tidak didukung, jika digunakan seperti yang dijelaskan:

    • Dalam kueri SELECT dengan UNION, INTERSECT, klausa WHERE, kueri nested, subkueri, dll.
    • Dalam pernyataan UPDATE, DELETE, INSERT, REPLACE.

    Misalnya, jika Anda memiliki aturan audit untuk mengaudit objek func1, hal berikut tidak akan diaudit:

    • SELECT func1() FROM table;
    • SELECT * FROM table WHERE a = func1();
    • SELECT func1() != 0;
    • SELECT func1() > 0;
    • SET @x = func1();

    Fungsi yang dipanggil langsung oleh SELECT tanpa operator apa pun dan tanpa klausa WHERE akan diaudit:

    • SELECT func1();
    • SELECT db.func1();
  • Pemfilteran menurut alamat IP tidak didukung untuk saat ini.

Langkah selanjutnya