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
-
Di konsol Google Cloud, buka halaman Instance Cloud SQL.
- Buka instance dan klik Edit.
- Scroll ke bawah ke bagian Flag.
- Untuk menetapkan flag yang belum pernah ditetapkan pada instance sebelumnya, klik
Tambahkan flag, pilih
cloudsql_mysql_audit
dari menu drop-down, lalu tetapkan nilainya keON
. - Klik Simpan untuk menyimpan perubahan.
- 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 menggunakangcloud
, 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 menggunakangcloud
, 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 adalah500
(milidetik).
Konsol
-
Di konsol Google Cloud, buka halaman Instance Cloud SQL.
- Buka instance dan klik Edit.
- Scroll ke bawah ke bagian Flag.
- 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.
- Klik Simpan untuk menyimpan perubahan.
- 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:
|
||||||
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
-
Di konsol Google Cloud, buka halaman Instance Cloud SQL.
- Buka instance dan klik Edit.
- Scroll ke bawah ke bagian Flag.
- Untuk menetapkan flag yang belum pernah ditetapkan pada instance sebelumnya, klik
Tambahkan flag, pilih
cloudsql_mysql_audit
dari menu drop-down, lalu tetapkan nilainya keOFF
. - Klik Simpan untuk menyimpan perubahan.
- 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
Mengaudit seluruh aktivitas untuk semua pengguna:
CALL mysql.cloudsql_create_audit_rule('*','*','*','*','B',1,@outval,@outmsg);
Mengaudit seluruh aktivitas untuk satu pengguna
user1
:CALL mysql.cloudsql_create_audit_rule('user1@*','*','*','*','B',1,@outval,@outmsg);
Audit semua aktivitas untuk semua pengguna yang dimulai dengan
user
:CALL mysql.cloudsql_create_audit_rule('user*@*','*','*','*','B',1, @outval,@outmsg);
Mengaudit seluruh operasi DML untuk semua pengguna:
CALL mysql.cloudsql_create_audit_rule('*','*','*','dml','B',1,@outval,@outmsg);
Mengaudit operasi pilih untuk database khusus
db1
:CALL mysql.cloudsql_create_audit_rule('*','db1','*','select','B',1,@outval,@outmsg);
Mengaudit seluruh aktivitas untuk database dengan karakter khusus
db~1
:CALL mysql.cloudsql_create_audit_rule('*','`db~1`','*','*','B',1,@outval,@outmsg);
Mengaudit operasi pilih dan hapus untuk tabel
db1.table1
:CALL mysql.cloudsql_create_audit_rule('*','db1','table1','select,delete','B',1,@outval,@outmsg);
Mengaudit seluruh operasi yang berhasil:
CALL mysql.cloudsql_create_audit_rule('*','*','*','*','S',1,@outval,@outmsg);
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
- Pelajari lebih lanjut tentang audit database MySQL.
- Lihat daftar lengkap operasi untuk audit database.