Menggunakan audit database MySQL

Topik ini menjelaskan cara mengaktifkan dan menggunakan Plugin Audit Cloud SQL untuk MySQL. Untuk mengetahui ringkasannya, lihat Audit database MySQL. Untuk mengetahui informasi selengkapnya tentang plugin MySQL, lihat pemuatan plugin MySQL.

Sebelum memulai

Log audit Akses Data

Mengaktifkan dan mengonfigurasi log audit Akses Data. Lihat Mengonfigurasi log audit Akses Data.

Hak istimewa yang diperlukan untuk pengguna audit

Anda harus memiliki hak istimewa EXECUTE pada prosedur tersimpan di audit untuk menjalankannya. Jika administrator perlu mengubah hak istimewa akses auditor ke prosedur audit yang tersimpan, mereka harus menggunakan perintah GRANT atau REVOKE di klien mysql. Untuk mengetahui detail tentang hak istimewa pengguna, lihat hak istimewa pengguna MySQL. Misalnya, jika administrator ingin memberikan akses kepada auditor bernama user, untuk mengelola aturan audit, mereka dapat memberikan hak istimewa tersebut menggunakan pernyataan berikut:

CREATE USER 'user'@'%' IDENTIFIED BY 'password';
GRANT EXECUTE ON PROCEDURE mysql.cloudsql_list_audit_rule TO 'user'@'%';

Jika nantinya administrator ingin mencabut akses ke auditor, mereka dapat mencabut hak istimewa tersebut menggunakan pernyataan berikut ini:

REVOKE ALL ON PROCEDURE mysql.cloudql_list_audit_rule FROM 'user'@'%';

Secara default, pengguna yang dibuat menggunakan Cloud SQL (kecuali pengguna IAM) adalah administrator yang memiliki semua hak istimewa kecuali FILE dan SUPER, termasuk semua hak istimewa untuk prosedur audit yang tersimpan. Pengguna database IAM, secara default, tidak memiliki hak istimewa.

Mengaktifkan Plugin Audit Cloud SQL untuk MySQL

Plugin Audit Cloud SQL untuk MySQL (cloudsql_mysql_audit) mengontrol perilaku audit untuk instance database tertentu. Untuk menggunakan plugin ini, Anda harus mengaktifkannya terlebih dahulu di instance Cloud SQL.

Untuk mengaktifkan plugin cloudsql_mysql_audit, gunakan salah satu opsi berikut ini:

  • --cloudsql_mysql_audit=ON

    Memberitahu server untuk mengaktifkan plugin. Jika plugin gagal untuk diinisialisasi, server akan berjalan dengan plugin yang dinonaktifkan.

  • --cloudsql_mysql_audit=FORCE

    Memberitahu server untuk mengaktifkan plugin, tetapi jika inisialisasi plugin gagal, server tidak akan dimulai. Dengan kata lain, opsi ini memaksa server untuk berjalan dengan plugin yang diaktifkan atau tidak sama sekali.

  • --cloudsql_mysql_audit=FORCE_PLUS_PERMANENT

    Seperti FORCE, tetapi juga mencegah plugin dihapus muatannya saat runtime. Jika pengguna mencoba untuk menghapus muatan plugin dengan UNINSTALL PLUGIN, error akan terjadi.

Status aktivasi plugin dapat dilihat di kolom PLUGIN_STATUS pada tabel INFORMATION_SCHEMA.PLUGINS.

Konsol

  1. Di konsol Google Cloud, buka halaman Instance Cloud SQL.

    Buka Instance Cloud SQL

  2. Buka instance dan klik Edit.
  3. Scroll ke bawah ke bagian Flag.
  4. Untuk menetapkan flag yang belum pernah ditetapkan pada instance sebelumnya, klik Tambahkan flag, pilih cloudsql_mysql_audit dari menu drop-down, lalu tetapkan nilainya ke ON.
  5. Klik Simpan untuk menyimpan perubahan.
  6. Konfirmasi perubahan di bagian Flags di halaman Ringkasan.

gcloud

Ganti kode berikut:

  • INSTANCE_NAME: Nama instance tempat Anda menyetel flag.
gcloud sql instances patch INSTANCE_NAME \
           --database-flags cloudsql_mysql_audit=ON

Perintah ini menimpa semua flag database yang ditetapkan sebelumnya. Untuk menyimpan tanda tersebut dan menambahkan yang baru, sertakan nilai untuk semua flag yang ingin ditetapkan pada instance; flag yang tidak disertakan secara spesifik diatur ke nilai default nya. Untuk flag yang tidak menggunakan nilai, tentukan nama flag yang diikuti dengan tanda sama dengan (=).

REST v1beta4

Sebelum menggunakan salah satu dari data permintaan, lakukan penggantian berikut:

  • project-id: ID project
  • instance-id: ID instance

Metode HTTP dan URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

Meminta isi JSON:

{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "cloudsql_mysql_audit",
        "value": "ON"
      }
    ]
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

REST v1

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • project-id: ID project
  • instance-id: ID instance

Metode HTTP dan URL:

PATCH https://sqladmin.googleapis.com/sql/v1/projects/project-id/instances/instance-id

Meminta isi JSON:

{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "cloudsql_mysql_audit",
        "value": "ON"
      }
    ]
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

Setelan Plugin Audit Cloud SQL untuk MySQL

Anda dapat menyesuaikan perilaku Plugin Audit Cloud SQL untuk MySQL menggunakan flag di bawah. Semua flag dapat diubah tanpa memulai ulang database. Untuk memahami cara mengelola flag, lihat Mengonfigurasi flag database.

  • cloudsql_mysql_audit_data_masking_regex

    Ekspresi reguler yang digunakan untuk penyamaran data yang sesuai dengan Ekspresi Reguler yang Kompatibel dengan Perl (PCRE).

    Secara default, dalam log audit output, sandi pengguna (<psw>) diganti dengan sandi samaran ***.

    Ekspresi reguler hanya diterapkan ke pernyataan dengan jenis perintah yang ditentukan menggunakan cloudsql_mysql_audit_data_masking_cmds. Saat menggunakan gcloud, Anda harus menggunakan file flag untuk menetapkan nilai dengan karakter khusus yang kompleks.

    Nilai default untuk flag ini:

    
    identified(?:/\*.*?\*/|\s)*?by(?:/\*.*?\*/|\s)*?(?:password)?(?:/\*.*?\*/|
    \s)*?['|"](?<psw>.*?)(?<!\\)['|"]|password(?:/\*.*?\*/|\s)*?\((?:/\*.*?\*/|
    \s)*?['|"](?<psw>.*?)(?<!\\)['|"](?:/\*.*?\*/|\s)*?\)|password(?:/\*.*?\*/|
    \s)*?(?:for(?:/\*.*?\*/|\s)*?\S+?)?(?:/\*.*?\*/|\s)*?=(?:/\*.*?\*/|\s)*?[
    '|"](?<psw>.*?)(?<!\\)['|"]|password(?:/\*.*?\*/|\s)*?['|"](?<psw>.*?)
    (?<!\\)['|"]
    
    

    Lihat contoh berikut.

    • Tanpa cloudsql_mysql_audit_data_masking_regex, entri log audit yang menjelaskan perintah untuk membuat pengguna akan muncul sebagai berikut ini:

      {..."cmd":"create_user","query":"create user user1@'localhost' identified
      by 'pw'"}
      
    • Dengan nilai default cloudsql_mysql_audit_data_masking_regex, log audit yang sama akan diubah menjadi:

      {..."cmd":"create_user","query":"create user user1@'localhost' identified by
      '***'"}
      
    • Jika Anda menetapkan cloudsql_mysql_audit_data_masking_regex ke (?<psw>.*), Cloud SQL dapat memfilter semua konten kueri.

      {..."cmd":"create_user","query":"***"}
      
  • cloudsql_mysql_audit_data_masking_cmds

    Daftar perintah yang dipisahkan koma tempat ekspresi reguler penyamaran data (cloudsql_mysql_audit_data_masking_regex) diterapkan. Setel string kosong ("") untuk menghentikan pemfilteran. Saat menggunakan gcloud, Anda harus menggunakan file flag untuk menyetel daftar yang dipisahkan koma. Nilai defaultnya mencakup perintah MySQL dengan klausa sandi berikut ini:

    create_user,alter_user,grant,update
    
  • cloudsql_mysql_audit_max_query_length

    Mengontrol panjang maksimum kueri untuk dicatat dalam log audit. Jika Anda tidak ingin melihat detail dari kueri, Anda dapat menggunakan 0, yang berarti kueri tidak dicatat dalam log audit. Tindakan ini menghemat ruang penyimpanan untuk log, sehingga biayanya lebih rendah. -1 berarti tidak ada batasan. Jumlah defaultnya adalah -1

  • cloudsql_mysql_audit_log_write_period

    Periode penulisan log, saat thread penulis menulis konten buffer ke disk setelah mencapai jumlah milidetik yang Anda tetapkan untuk opsi flag ini, atau saat buffer sudah penuh. Jika Anda menetapkan opsi flag ini ke 0, thread pengguna akan dipaksa untuk menunggu notifikasi dari thread penulis bahwa penulisan telah selesai. Defaultnya adalah 500 (milidetik).

Konsol

  1. Di konsol Google Cloud, buka halaman Instance Cloud SQL.

    Buka Instance Cloud SQL

  2. Buka instance dan klik Edit.
  3. Scroll ke bawah ke bagian Flag.
  4. Untuk menetapkan flag yang belum pernah ditetapkan pada instance sebelumnya, klik Tambahkan flag, dan pilih flag database dari daftar di atas dari menu drop-down, lalu tetapkan nilainya.
  5. Klik Simpan untuk menyimpan perubahan.
  6. Konfirmasi perubahan di bagian Flags di halaman Ringkasan.

gcloud

Ganti kode berikut:

  • INSTANCE_NAME: Nama instance tempat Anda menyetel flag.
  • FLAG_NAME: Nama flag konfigurasi.
  • FLAG_VALUE: Nilai yang akan digunakan untuk flag.

        gcloud sql instances patch INSTANCE_NAME /
                   --database-flags FLAG_NAME=FLAG_VALUE
    

REST v1beta4

Sebelum menggunakan salah satu dari data permintaan, lakukan penggantian berikut:

  • project-id: ID project
  • instance-id: ID instance

Metode HTTP dan URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

Meminta isi JSON:

{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "flag_name",
        "value": "flag_value"
      }
    ]
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

REST v1

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • project-id: ID project
  • instance-id: ID instance

Metode HTTP dan URL:

PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id

Meminta isi JSON:

{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "flag_name",
        "value": "flag_value"
      }
    ]
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

Mengonfigurasi audit database

Mengelola aturan audit

Cloud SQL menggunakan serangkaian prosedur tersimpan untuk mengelola aturan audit Plugin Audit Cloud SQL untuk MySQL. Ada empat prosedur tersimpan yang dapat Anda gunakan untuk membuat, membuat daftar, memperbarui, dan menghapus aturan audit.

Setiap prosedur yang disimpan menampilkan dua variabel: @outval dan @outmsg. Variabel ini menunjukkan kode status dan pesan error dari prosedur yang disimpan, masing-masing. Anda dapat menggunakan tanda bintang (*) sebagai karakter pengganti untuk menelusuri nama pengguna, host, database, dan tabel. Gunakan tanda bintang sebagai akhiran, awalan, atau keduanya. Selain itu, Anda dapat menggunakan karakter pengganti % hanya untuk host. Anda dapat menggunakan backtick (`) untuk menunjukkan bahwa string harus digunakan secara harfiah. Misalnya, `ta*ble` itu cocok secara harfiah.

Agar perubahan baru dapat diterapkan, Anda harus menjalankan prosedur tersimpan dengan parameter input reload_mode=1 atau memanggil mysql.cloudsql_reload_audit_rule(1) agar perubahan baru tersebut diterapkan.

Membuat aturan audit

Anda dapat menggunakan mysql.cloudsql_create_audit_rule untuk membuat aturan audit baru

Untuk membuat aturan audit dan memuatnya ulang dalam satu panggilan, gunakan pernyataan berikut ini:

CALL mysql.cloudsql_create_audit_rule('user@host','db','obj','ops','op_result',1, @outval,@outmsg);
SELECT @outval, @outmsg;

Untuk membuat aturan dan memuatnya ulang dalam panggilan terpisah, gunakan pernyataan berikut ini:

CALL mysql.cloudsql_create_audit_rule('user@host','db','obj','ops','op_result',0, @outval,@outmsg);
SELECT @outval, @outmsg;
CALL mysql.cloudsql_reload_audit_rule(1);

Perintah sebelumnya memungkinkan Anda untuk membuat beberapa aturan lalu memuat ulang semua perubahan secara bersamaan.

Tabel berikut menampilkan parameter input dan output untuk perintah sebelumnya.

Parameter input
Name Jenis Deskripsi Contoh
user@host atau user@ip string Daftar pengguna database yang dipisahkan koma yang akan diaudit. Gunakan format user@host atau user@ip.

user1@localhost,
user1@*,
user1@%,
user@ip
db string Daftar database yang dipisahkan koma yang akan diaudit. db1,db2,db3*
obj string Daftar objek database yang dipisahkan koma yang akan diaudit. table1,table2,table3*
ops string Daftar tindakan database yang dipisahkan koma yang akan diaudit. select,delete,insert
op_result string Audit sukses (S), gagal (U), atau keduanya (B) operasi yang sukses dan gagal. S,U, atau B
reload_mode Bilangan Bulat 0 untuk tidak memuat ulang aturan dan 1 untuk memuat ulang. 0 atau 1
Parameter output
Name Jenis Deskripsi Contoh
@outval int Kode status dari prosedur yang disimpan. 0 menandakan sukses dan 1 menandakan gagal.
@outmsg string Pesan error dari prosedur yang disimpan.

Aturan audit memiliki batasan seperti berikut ini:

Batasan
Panjang user, db, obj, dan ops. Ukuran maksimum adalah 2048 karakter.
Jumlah kombinasi dari user, db, obj ,dan ops. Maksimum 1000 kombinasi. Misalnya, mengaudit aturan audit user1,user2, db1, db2, table1,table2, dan select,delete menghasilkan kombinasi 2 x 2 x 2 x 2 = 16.

Mencantumkan aturan audit

Auditor dapat menggunakan mysql.cloudsql_list_audit_rule untuk mencantumkan aturan audit yang telah ada.

Untuk mencantumkan aturan audit 1 dan 2, gunakan perintah berikut ini:

CALL mysql.cloudsql_list_audit_rule('1,2',@outval,@outmsg);
SELECT @outval, @outmsg;

Untuk menampilkan daftar semua aturan audit, lakukan hal berikut ini:

CALL mysql.cloudsql_list_audit_rule('*',@outval,@outmsg);
SELECT @outval, @outmsg;

Tabel berikut menampilkan parameter input dan output untuk perintah sebelumnya.

Parameter input
Name Jenis Deskripsi Contoh
rule_id string Daftar ID aturan yang dipisahkan koma yang akan dihapus. 1,2,3
Parameter output
Name Jenis Deskripsi Contoh
@outval int Kode status dari prosedur yang disimpan. 0 menandakan sukses dan 1 menandakan gagal.
@outmsg string Pesan error dari prosedur yang disimpan.

Memperbarui aturan audit

Anda dapat menggunakan mysql.cloudsql_update_audit_rule untuk memperbarui aturan audit yang sudah ada.

Untuk memperbarui aturan audit dan memuatnya ulang dalam satu panggilan, gunakan pernyataan berikut ini:

CALL mysql.cloudsql_update_audit_rule(1,'user@host','db','obj','ops','op_result',1,@outval,@outmsg);
SELECT @outval, @outmsg;

Anda mungkin perlu memperbarui beberapa aturan audit dalam satu sesi sebelum memuat ulang aturan. Anda dapat menggunakan prosedur yang tersimpan berikut ini untuk memperbarui aturan dalam satu langkah, lalu memuat ulang aturan tersebut di langkah berikutnya.

CALL mysql.cloudsql_update_audit_rule(1,'user@host','db','obj','ops','op_result',0,@outval,@outmsg);
SELECT @outval, @outmsg;
CALL mysql.cloudsql_reload_audit_rule(1);

Tabel berikut menampilkan parameter input dan output untuk perintah sebelumnya.

Parameter input
Name Jenis Deskripsi Contoh
rule_id int ID untuk aturan yang akan diperbarui. 5
user@host string Daftar pengguna database yang dipisahkan koma yang akan diaudit. Gunakan format user@host.

user1@localhost,user1@*
user1@%
db string Daftar database yang dipisahkan koma yang akan diaudit. db1,db2,db3*
obj string Daftar objek database yang dipisahkan koma yang akan diaudit. table1,table2,table3*
ops string Daftar tindakan database yang dipisahkan koma yang akan diaudit. SELECT,DELETE,INSERT
op_result string Audit sukses (S), gagal (U), atau keduanya (B) operasi yang sukses dan gagal. S,U, atau B
reload_mode Bilangan Bulat 0 untuk tidak memuat ulang aturan dan 1 untuk memuat ulang. 0 atau 1
Parameter output
Name Jenis Deskripsi Contoh
@outval int Kode status dari prosedur yang disimpan. 0 menandakan sukses dan 1 menandakan gagal.
@outmsg string Pesan error dari prosedur yang disimpan.

Aturan audit memiliki batasan seperti berikut ini:

Batasan
Panjang user, db, obj dan ops. Ukuran maksimum 2048 karakter.
Jumlah kombinasi dari user, db, obj, dan ops. Maksimum 1000 kombinasi. Misalnya, mengaudit aturan audit user1,user2, db1, db2, table1,table2, dan select,delete menghasilkan kombinasi 2 x 2 x 2 x 2 = 16.

Menghapus aturan audit

Anda dapat menggunakan mysql.cloudsql_delete_audit_rule untuk menghapus aturan audit yang ada.

Untuk menghapus aturan audit dan memuatnya ulang dalam satu panggilan, gunakan pernyataan berikut ini:

CALL mysql.cloudsql_delete_audit_rule('1,2',1,@outval,@outmsg);
SELECT @outval, @outmsg;

Untuk menghapus aturan dan memuatnya ulang dalam panggilan terpisah, gunakan pernyataan berikut ini:

CALL mysql.cloudsql_delete_audit_rule('1,2',0,@outval,@outmsg);
SELECT @outval, @outmsg;
CALL cloudsql_reload_audit_rule(1);

Perintah sebelumnya memungkinkan Anda menghapus beberapa aturan, lalu memuat ulang semua perubahan secara bersamaan.

Tabel berikut menampilkan parameter input dan output untuk perintah sebelumnya.

Parameter input
Name Jenis Deskripsi Contoh
rule_id string Daftar ID aturan yang dipisahkan koma yang akan dihapus. 1,2,3
reload_mode Bilangan Bulat 0 untuk tidak memuat ulang aturan dan 1 untuk memuat ulang. 0 atau 1
Parameter output
Name Jenis Deskripsi Contoh
@outval int Kode status dari prosedur yang disimpan. 0 menandakan sukses dan 1 menandakan gagal.
@outmsg string Pesan error dari prosedur yang disimpan.

Grup operasi

Plugin Audit Cloud SQL untuk MySQL mendukung penggunaan grup operasi dalam definisi aturan untuk mengaudit koleksi aktivitas. Anda dapat menggunakan grup operasi berikut untuk menyederhanakan pembuatan aturan audit.

Grup operasi Operasi meliputi
dql select
dml delete,delete_multi, insert, insert_select, load, replace, replace_select, truncate, update, update_multi,
ddl alter_db, alter_event, alter_function, alter_procedure, alter_table, alter_user, create_db, create_event, create_function, create_index, create_procedure, create_table, create_trigger, create_user, create_udf, create_view, drop_db, drop_event, drop_function, drop_index, drop_procedure, drop_table, drop_trigger, drop_user, drop_view, rename_table, rename_user
dcl grant, revoke, revoke_all
show show_binlog_events, show_create_func, show_create_proc, show_procedure_code, show_create_event, show_create_trigger, show_events, show_function_code, show_grants, show_relaylog_events, show_triggers,
call call_procedure

Melihat log audit database Cloud SQL

Melihat kumpulan data log audit database di Cloud Logging

Untuk melihat log audit database, pertama-tama pastikan Anda telah mengaktifkan log audit Akses Data untuk project Anda. Log audit MySQL yang dihasilkan untuk instance tertentu dikirim ke Cloud Logging sebagai log audit Akses Data. Anda dapat melihat log audit database MySQL yang dihasilkan melalui aplikasi Logs Explorer.

Di Logs Explorer, Anda dapat melihat log audit MySQL dengan menggunakan kueri berikut untuk menampilkan semua log audit database MySQL untuk project Cloud SQL tertentu melalui antarmuka Filter Lanjutan.

Ganti kode berikut:

  • PROJECT_NAME: Nama project yang Anda inginkan untuk log auditnya
    resource.type="cloudsql_database"
    logName="projects/PROJECT_NAME/logs/cloudaudit.googleapis.com%2Fdata_access"
    protoPayload.request.@type="type.googleapis.com/google.cloud.sql.audit.v1.MysqlAuditEntry"

Atau, Anda dapat memilih filter log cloudaudit.googleapis.com/data_access ini.

Format Log Audit

Log audit memiliki kolom berikut.

Nama kolom Deskripsi
msgType String untuk mewakili jenis pesan log audit. Satu-satunya nilai untuk msgType adalah activity.
status Status operasi, antara success atau unsuccessful.
date Stempel waktu menunjukkan kapan peristiwa audit dibuat.
threadId ID dari thread MySQL.
queryId ID dari kueri MySQL.
user String yang mewakili nama pengguna yang dikirim oleh klien. Nilai ini mungkin berbeda dari nilai privUser.
privUser String yang mewakili pengguna yang diautentikasi oleh server sebagai klien. Ini adalah nama pengguna yang digunakan server untuk pemeriksaan hak istimewa. Hal ini mungkin berbeda dari nilai pengguna.
gcpIamAccount String yang mewakili akun IAM GCP atau akun layanan.
ip String yang mewakili alamat IP klien.
host String yang mewakili nama host klien.
errCode Kode error MySQL untuk operasi yang gagal. Lihat Referensi Pesan Error Server MySQL.
cmd String yang menunjukkan pernyataan SQL (jenis operasi) yang akan digunakan. Misalnya, INSERT, UPDATE, atau DELETE.
objects Objek audit. Biasanya berupa tabel. Kolom ini menyertakan informasi berikut tentang objek:

db String yang mewakili nama database default.
name String yang mewakili nama objek. Biasanya nama tabel.
objType String yang mewakili jenis objek. Biasanya TABLE
query Pernyataan SQL (dijalankan secara langsung).
chunkCount Jumlah total bagian jika ukuran kueri log audit lebih dari cloudsql_mysql_audit_event_split_threshold (90 ribu).
chunkIndex Indeks potongan. chunk_index dimulai pada pukul 1
@type Jenisnya selalu type.googleapis.com/google.cloud.sql.audit.v1.MysqlAuditEntry.

Berikut ini adalah contoh entri log audit.

{
"msgType":"activity",
"status":"unsuccessful",
"date":"2021-11-11T06:16:16.163603Z",
"threadId":"750",
"queryId":"26763",
"user":"root",
"priv_user":"root",
"ip":"",
"host":"localhost",
"errCode":"1146",
"cmd":"select",
"objects":[{"db":"test","name":"t4","obj_type":"TABLE"}],
"query":"select * from test.t4",
"chunkCount":2,
"chunkIndex":2,
"@type":"type.googleapis.com/google.cloud.sql.audit.v1.MysqlAuditEntry"
}

Menonaktifkan audit database

Untuk menonaktifkan Plugin Audit Cloud SQL untuk MySQL, Anda dapat menetapkan flag database cloudsql_mysql_audit untuk MENONAKTIFKAN atau menghapus flag tersebut.

Konsol

  1. Di konsol Google Cloud, buka halaman Instance Cloud SQL.

    Buka Instance Cloud SQL

  2. Buka instance dan klik Edit.
  3. Scroll ke bawah ke bagian Flag.
  4. Untuk menetapkan flag yang belum pernah ditetapkan pada instance sebelumnya, klik Tambahkan flag, pilih cloudsql_mysql_audit dari menu drop-down, lalu tetapkan nilainya ke OFF.
  5. Klik Simpan untuk menyimpan perubahan.
  6. Konfirmasi perubahan di bagian Flag pada halaman Ringkasan.

gcloud

Ganti kode berikut:

  • INSTANCE_NAME: Nama instance tempat Anda menyetel flag.

    gcloud sql instances patch INSTANCE_NAME \
               --database-flags cloudsql_mysql_audit=OFF
    

REST v1beta4

Sebelum menggunakan salah satu dari data permintaan, lakukan penggantian berikut:

  • project-id: ID project
  • instance-id: ID instance

Metode HTTP dan URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

Meminta isi JSON:

{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "cloudsql_mysql_audit",
        "value": "OFF"
      }
    ]
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

REST v1

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • project-id: ID project
  • instance-id: ID instance

Metode HTTP dan URL:

PATCH https://sqladmin.googleapis.com/sql/v1/projects/project-id/instances/instance-id

Meminta isi JSON:

{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "cloudsql_mysql_audit",
        "value": "OFF"
      }
    ]
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

Contoh Aturan Audit

  1. Mengaudit seluruh aktivitas untuk semua pengguna:

    CALL mysql.cloudsql_create_audit_rule('*','*','*','*','B',1,@outval,@outmsg);
    
  2. Mengaudit seluruh aktivitas untuk satu pengguna user1:

    CALL mysql.cloudsql_create_audit_rule('user1@*','*','*','*','B',1,@outval,@outmsg);
    
  3. Audit semua aktivitas untuk semua pengguna yang dimulai dengan user:

    CALL mysql.cloudsql_create_audit_rule('user*@*','*','*','*','B',1, @outval,@outmsg);
    
  4. Mengaudit seluruh operasi DML untuk semua pengguna:

    CALL mysql.cloudsql_create_audit_rule('*','*','*','dml','B',1,@outval,@outmsg);
    
  5. Mengaudit operasi pilih untuk database khusus db1:

    CALL mysql.cloudsql_create_audit_rule('*','db1','*','select','B',1,@outval,@outmsg);
    
  6. Mengaudit seluruh aktivitas untuk database dengan karakter khusus db~1:

    CALL mysql.cloudsql_create_audit_rule('*','`db~1`','*','*','B',1,@outval,@outmsg);
    
  7. Mengaudit operasi pilih dan hapus untuk tabel db1.table1:

    CALL mysql.cloudsql_create_audit_rule('*','db1','table1','select,delete','B',1,@outval,@outmsg);
    
  8. Mengaudit seluruh operasi yang berhasil:

    CALL mysql.cloudsql_create_audit_rule('*','*','*','*','S',1,@outval,@outmsg);
    
  9. Jangan mengaudit semua aktivitas untuk semua pengguna yang dimulai dengan user:

    CALL mysql.cloudsql_create_audit_rule('user*@*','*','*','*','E',1, @outval,@outmsg);
    

Memecahkan masalah

Masalah Pemecahan masalah
Saya tidak dapat melihat cloudsql_mysql_audit saat memanggil perintah:

SHOW (global) variables
cloudsql_mysql_audit adalah nama plugin. Untuk memeriksa apakah aktif, gunakan perintah berikut ini:


SHOW PLUGINS

Dan periksa entri status.
Mengapa saya tidak dapat melihat log audit mysql setelah mengaktifkan cloudsql_mysql_audit? Anda harus mengaktifkan log audit Akses Data (seperti yang dijelaskan dalam Mengonfigurasi log audit Akses Data). Selain itu, aturan audit diperlukan agar Plugin Audit Cloud SQL untuk MySQL dapat mengaudit log audit yang diinginkan. Gunakan prosedur tersimpan dengan `reload_mode=1` untuk membuat aturan audit, atau menjalankan perintah berikut atau memulai ulang database agar aturan audit yang baru ditambahkan berfungsi:


CALL mysql.cloudsql_reload_audit_rule(1)
Saya melihat error berikut ini saat memperbarui flag database:

Error 1193: Variabel sistem tidak dikenal 'cloudsql_mysql_audit_xxx'
Flag cloudsql_mysql_audit_xxx hanya berfungsi saat Plugin Audit aktif. Hapus semua flag cloudsql_mysql_audit_xxx yang ada dari instance, lalu aktifkan plugin menggunakan perintah berikut sebelum memperbarui flag cloudsql_mysql_audit_xxx:


cloudsql_mysql_audit=ON
Saya dapat melihat log audit yang dibuat meskipun saya tidak menetapkan aturan audit apa pun. Perubahan pada tabel aturan audit (mysql.audit_log_rules dan mysql.audit_log_rules_expanded) serta prosedur audit yang tersimpan (mysql.cloudsql_xxxx_audit_rule) login secara default.
Setelah melakukan perubahan pada instance utama, saya tidak dapat melihat log audit di instance replika saya. Thread replikasi dan thread pemulihan error tidak di loginkan. Cloud SQL mengaudit aktivitas pada instance utama, tetapi tidak pada instance replika.
Saya mencoba untuk menggunakan perintah berikut untuk menetapkan nilai dari daftar yang dipisahkan koma, tetapi tidak berhasil.

gcloud instances patch --database-flags
Jika menentukan daftar nilai flag yang dipisahkan koma menggunakan perintah gcloud, gunakan argumen --flags-file. Pertama, Anda harus membuat file dengan informasi berikut ini:


--database-flags:
general_log: OFF
cloudsql_mysql_audit_max_query_length: '20'
cloudsql_mysql_audit_data_masking_cmds: select,update

Lalu, jalankan perintah berikut ini:


gcloud sql instances patch --flags-file=flagfile
Perintah berikut menampilkan error:

CALL mysql.cloudsql_create_canonical_rules
Hal ini memang dimaksudkan. mysql.cloudsql_create_canonical_rules hanya boleh dipanggil secara internal oleh mysql.cloudsql_create_audit_rule dan mysql.cloudsql_update_audit_rule.
Operasi apa yang dapat saya audit? Operasi yang didukung tercantum dalam Daftar lengkap operasi yang didukung. Beberapa operasi, seperti berikut ini, tidak diaudit karena tidak memengaruhi database:


USE db_name


atau


SHOW VARIABLES


Selain itu, dalam beberapa kasus, fungsi tersebut tidak dapat diaudit sebagai objek (fitur yang tidak didukung).
Saya ingin mengaudit semua operasi pada tabel tertentu, jadi saya membuat aturan audit berikut ini:

mysql.cloudsql_create_audit_rule("user@*","db", "table","*","B",1,@1,@2);
Tetapi saya dapat melihat log audit yang tidak terkait dengan tabel ini, seperti disconnect dan connect.
Beberapa operasi, seperti memutuskan koneksi atau menghubungkan koneksi, dianggap global. Keduanya mengabaikan kolom input db dan object.
Saat membuat, memperbarui, atau menghapus aturan audit menggunakan prosedur tersimpan, saya melihat error seperti berikut ini.

Server MySQL berjalan dengan opsi read-only sehingga tidak dapat menjalankan pernyataan ini.
Cloud SQL tidak dapat mengubah prosedur yang tersimpan pada instance hanya baca. Jika instance tersebut adalah instance utama, hapus flag read_only. Jika instance adalah instance replika, buatlah perubahan pada instance utamanya. Setelah perubahan aturan direplikasi ke instance replika, pada instance replika, jalankan perintah berikut ini untuk memuat ulang aturan ke dalam replika:

CALL mysql.cloudsql_reload_audit_rule(1)
Saat membuat, memperbarui, atau menghapus aturan audit, saya melihat error berikut ini, meskipun perubahan berhasil.

0 rows affected
Respons 0 rows affected adalah untuk pernyataan terakhir yang dijalankan dalam prosedur tersimpan, bukan tabel. Untuk mengetahui apakah aturan audit diubah, gunakan perintah berikut ini:


mysql.cloudsql_list_audit_rule
Saya tidak dapat menetapkan cloudsql_mysql_audit_data_masking_cmds dan cloudsql_mysql_audit_data_masking_regexp dengan gcloud. gcloud memerlukan penggunaan argumen --flags-file untuk menetapkan nilai flag kompleks (flag yang menyertakan karakter khusus.
Saya membuat prosedur tersimpan menggunakan pernyataan CREATE USER, tetapi sandi tidak disamarkan. Secara default, penyamaran hanya berfungsi untuk cmds (operasi), seperti berikut ini:

CREATE_USER, ALTER_USER, GRANT, UPDATE.

Untuk memfilter sandi saat membuat prosedur tersimpan, tambahkan create_procedure ke cloudsql_mysql_audit_data_masking_cmds.
Saya mendapatkan kesalahan batas waktu tunggu yang terlampaui saat mencoba untuk membuat, memperbarui, atau menghapus aturan audit. Biasanya, error ini terjadi ketika dua sesi atau lebih mencoba untuk mengubah aturan audit secara bersamaan. Jika hal ini sering terjadi, tingkatkan nilai variabel innodb_lock_wait_timeout. Opsi ini dapat ditingkatkan secara global (menggunakan flag database) atau hanya untuk sesi, misalnya, menggunakan perintah berikut ini:

SET innodb_lock_wait_timeout=120
.

Langkah selanjutnya