MariaDB
 sql >> Teknologi Basis Data >  >> RDS >> MariaDB

Menggunakan Plugin Log Audit Percona untuk Keamanan Basis Data

Mengapa Anda Perlu Menggunakan Plugin Audit Untuk Database Anda?

Audit dalam database tidak menyimpang dari artinya karena memiliki konotasi yang sama yaitu untuk memeriksa, memeriksa, dan mengevaluasi peristiwa/transaksi database yang dicatat atau dilakukan dalam database Anda. Bahkan menambahkan lebih banyak kelayakan untuk database terutama sebagai fitur keamanan, karena merekomendasikan sisi administrasi menjadi sensitif untuk mengelola dan memproses data. Ini mencakup tanggung jawab dan akuntabilitas untuk pengelolaan data.

Audit Basis Data mengharuskan untuk setiap transaksi (yaitu DDL dan DML) harus dicatat untuk merekam jejak dan mendapatkan gambaran umum lengkap tentang apa yang terjadi selama operasi basis data. Operasi ini dapat mengambil pertimbangan:

  • Menyediakan kemampuan untuk memantau dan men-debug untuk meningkatkan kinerja di sisi aplikasi
  • Kepatuhan keamanan dan privasi data seperti PCI DSS, HIPAA, GDPR, dll. 
  • Menyediakan kemampuan untuk mengambil otonomi data khusus untuk lingkungan multi-tenancy. Hal ini memungkinkan mereka untuk mengambil analisis data untuk membedakan dan memfilter transaksi berdasarkan sensitivitas dan privasi untuk pertimbangan keamanan dan kinerja.
  • Mendorong tindakan administratif untuk mencegah pengguna basis data dari tindakan yang tidak pantas berdasarkan aktivitas investigasi yang mencurigakan atau dibatasi oleh perannya. Artinya, pengguna baca, misalnya, hanya boleh mengambil data dan akses terbatas ke database tertentu yang hanya menjadi tanggung jawabnya atau dengan cakupan terbatas sesuai dengan peran pekerjaannya.

Apa itu Plugin Log Audit Percona?

Pendekatan sebelumnya dalam mengaudit transaksi atau peristiwa yang berjalan di database Anda bisa menjadi pendekatan yang besar dan kuat. Mengaktifkan file log umum atau menggunakan log kueri lambat. Ini bukan pendekatan yang sempurna sehingga plugin log audit berhasil menambahkan lebih banyak fleksibilitas dan parameter yang dapat disesuaikan untuk mengisi kesenjangan. Percona mengklaim Plugin Log Audit mereka adalah alternatif untuk Audit Perusahaan MySQL. Meskipun itu benar, ada peringatan di sini bahwa Plugin Log Audit Percona tidak tersedia untuk instalasi MySQL Oracle. Tidak ada tarball yang dapat diunduh untuk biner ini tetapi mudah untuk menginstal hanya dengan menyalin file audit_log.so yang ada dari Percona Server atau instalasi Percona XtraDB Cluster yang ada. Sebaiknya gunakan atau salin audit_log.so yang ada dari versi Server Percona yang sama dengan versi komunitas MySQL juga. Jadi jika target MySQL Community versi Anda adalah 8.x, maka gunakan audit_log.so dari versi Percona Server 8.x juga. Kami akan menunjukkan cara melakukannya pada versi komunitas MySQL nanti di blog ini.

Plugin Log Audit Percona tentu saja open-source dan tersedia gratis untuk digunakan. Jadi jika aplikasi enterprise Anda menggunakan database backend seperti Percona Server atau vanilla MySQL, maka Anda bisa menggunakan plugin ini. MySQL Enterprise Audit hanya tersedia untuk MySQL Enterprise Server dan ada harganya. Selain itu, Percona terus memperbarui dan memelihara perangkat lunak ini dan ini datang sebagai keuntungan besar seolah-olah ada rilis utama dari hulu MySQL tersedia. Percona juga akan merilis berdasarkan versi utamanya dan itu memengaruhi pembaruan dan fungsionalitas yang diuji juga untuk alat plugin log audit mereka. Jadi setiap ketidakcocokan dari versi sebelumnya, harus diperbarui juga agar berfungsi dengan versi MySQL terbaru dan aman.

Plugin Log Audit Percona ditandai sebagai salah satu alat keamanan, tetapi izinkan kami menjelaskannya lagi. Alat ini digunakan untuk mengaudit log. Satu-satunya tujuan adalah untuk mencatat jejak transaksi dari database Anda. Itu tidak melakukan firewall atau tidak menerapkan tindakan pencegahan untuk memblokir pengguna tertentu. Alat ini terutama untuk mengaudit log dan digunakan untuk analisis transaksi basis data.

Menggunakan Plugin Log Audit Percona

Di bagian ini, kita akan membahas cara memasang, menggunakan, dan betapa bermanfaatnya plugin khususnya dalam situasi dunia nyata.

Menginstal Plugin

Percona hadir dengan berbagai sumber untuk binari database mereka. Setelah Anda menginstal server database dengan benar, penginstalan standar akan menempatkan objek bersama plugin log audit di  /usr/lib64/mysql/plugin/audit_log.so. Memasang plugin sebagai cara untuk mengaktifkannya di dalam server Percona/MySQL dapat dilakukan dengan tindakan berikut di bawah ini. Langkah ini dilakukan dengan menggunakan Percona Server 8.0,

mysql> select @@version_comment, @@version\G

*************************** 1. row ***************************

@@version_comment: Percona Server (GPL), Release 12, Revision 7ddfdfe

        @@version: 8.0.21-12

1 row in set (0.00 sec)

Kemudian langkah-langkahnya sebagai berikut:

  1. Verifikasi dulu apakah plugin ada atau tidak

## Periksa apakah plugin diaktifkan atau diinstal

mysql> select * from information_schema.PLUGINS where PLUGIN_NAME like '%audit%';

Empty set (0.00 sec)



mysql> show variables like 'audit%';

Empty set (0.00 sec)
  1. Instal plugin,

## Periksa lokasi plugin

mysql> show variables like 'plugin%';

+---------------+--------------------------+

| Variable_name | Value                    |

+---------------+--------------------------+

| plugin_dir    | /usr/lib64/mysql/plugin/ |

+---------------+--------------------------+

1 row in set (0.00 sec)



mysql> \! ls -a /usr/lib64/mysql/plugin/audit_log.so

/usr/lib64/mysql/plugin/audit_log.so

## Siap lalu instal

mysql> INSTALL PLUGIN audit_log SONAME 'audit_log.so';

Query OK, 0 rows affected (0.01 sec)
  1. Verifikasi kembali sekali lagi

mysql> select * from information_schema.PLUGINS where PLUGIN_NAME like '%audit%'\G

*************************** 1. row ***************************

           PLUGIN_NAME: audit_log

        PLUGIN_VERSION: 0.2

         PLUGIN_STATUS: ACTIVE

           PLUGIN_TYPE: AUDIT

   PLUGIN_TYPE_VERSION: 4.1

        PLUGIN_LIBRARY: audit_log.so

PLUGIN_LIBRARY_VERSION: 1.10

         PLUGIN_AUTHOR: Percona LLC and/or its affiliates.

    PLUGIN_DESCRIPTION: Audit log

        PLUGIN_LICENSE: GPL

           LOAD_OPTION: ON

1 row in set (0.00 sec)



mysql> show variables like 'audit%';

+-----------------------------+---------------+

| Variable_name               | Value         |

+-----------------------------+---------------+

| audit_log_buffer_size       | 1048576       |

| audit_log_exclude_accounts  |               |

| audit_log_exclude_commands  |               |

| audit_log_exclude_databases |               |

| audit_log_file              | audit.log     |

| audit_log_flush             | OFF           |

| audit_log_format            | OLD           |

| audit_log_handler           | FILE          |

| audit_log_include_accounts  |               |

| audit_log_include_commands  |               |

| audit_log_include_databases |               |

| audit_log_policy            | ALL           |

| audit_log_rotate_on_size    | 0             |

| audit_log_rotations         | 0             |

| audit_log_strategy          | ASYNCHRONOUS  |

| audit_log_syslog_facility   | LOG_USER      |

| audit_log_syslog_ident      | percona-audit |

| audit_log_syslog_priority   | LOG_INFO      |

+-----------------------------+---------------+

18 rows in set (0.00 sec)

Menginstal Plugin Audit Percona Melalui Versi Komunitas MySQL

Saat menginstal pada versi Oracle MySQL, seperti yang telah kami sebutkan di atas, selalu sesuaikan dengan versi Server Percona tempat file audit_log.so berasal. Jadi misalnya, saya memiliki versi MySQL berikut di bawah ini,

nodeB $  mysqld --version

/usr/sbin/mysqld  Ver 8.0.22 for Linux on x86_64 (MySQL Community Server - GPL)

Sedangkan, Server Percona saya adalah,

nodeA $ mysqld --version

/usr/sbin/mysqld  Ver 8.0.21-12 for Linux on x86_64 (Percona Server (GPL), Release 12, Revision 7ddfdfe)

Yang perlu Anda lakukan hanyalah menyalin dari sumber Percona ke server tempat Anda menginstal Server Komunitas MySQL.

nodeA $ scp /usr/lib64/mysql/plugin/audit_log.so nodeB:/tmp/

Kemudian pindah ke /usr/lib64/mysql/plugin tempat plugin akan ditempatkan.

[email protected] > show global variables like 'plugin%';

+---------------+--------------------------+

| Variable_name | Value                    |

+---------------+--------------------------+

| plugin_dir    | /usr/lib64/mysql/plugin/ |

+---------------+--------------------------+

1 row in set (0.00 sec)



nodeB $ mv /tmp/audit_log.so /usr/lib64/mysql/plugin

Selebihnya, Anda dapat mengikuti langkah-langkah seperti yang disebutkan di atas untuk melanjutkan menginstal atau mengaktifkan Plugin Login Audit Percona untuk Server Komunitas MySQL.

Konfigurasi dan Pengelolaan Plugin Log Audit Percona

Plugin Log Audit Percona adalah alat yang sangat fleksibel yang sangat dapat dikonfigurasi atau disesuaikan untuk memenuhi kebutuhan Anda saat Anda mencatat koneksi atau transaksi database Anda. Ini adalah implementasi mode linier untuk konfigurasi yang diberikan sehingga meskipun fleksibel untuk dikustomisasi oleh parameter yang diberikan, hanya nilai yang diberikan yang akan dicatat dan diaudit selama database Anda berjalan dan itu dilakukan secara asinkron secara default. Setiap variabel parameter dalam plugin ini penting tetapi di bawah ini adalah parameter terpenting yang dapat Anda gunakan untuk mengonfigurasi plugin:

  • audit_log_strategy - Digunakan untuk menentukan strategi log audit dan ketika audit_log_handler diatur ke FILE. yang merupakan salah satu nilai berikut yang mungkin: 
    • ASYNCHRONOUS - (default) log menggunakan buffer memori, jangan jatuhkan pesan jika buffer penuh
    • PERFORMANCE - log menggunakan buffer memori, hapus pesan jika buffer penuh
    • SEMISYNCHRONOUS - masuk langsung ke file, jangan menyiram dan menyinkronkan setiap acara
    • SYNCHRONOUS - log langsung ke file, flush, dan sinkronkan setiap acara
  • audit_log_file - Nama file yang akan digunakan untuk menyimpan log audit, yang defaultnya adalah file ${datadir}/audit.log. Anda dapat menggunakan jalur file relatif dari datadir database Anda atau jalur file absolut.
  • audit_log_flush - Berguna ketika Anda perlu menyiram log seperti digunakan dalam koordinasi dengan logrotate
  • audit_log_buffer_size - Secara default, Percona Audit Log mencatat jejak ke file log default. Variabel ini berguna ketika audit_log_handler =FILE, dan audit_log_strategy =ASYNCHRONOUS atau PERFORMANCE. Saat disetel, ini digunakan untuk menentukan ukuran buffer memori yang digunakan untuk logging. Hal ini memungkinkan Anda menghindari penurunan performa penalti saat log audit diaktifkan.
  • audit_log_format - Format untuk menentukan saat merekam atau menyimpan informasi ke file log audit Anda. Menerima format sebagai LAMA/BARU (berdasarkan format XML), JSON, dan CSV. Ini sangat berguna terutama jika nanti Anda menggabungkannya dengan alat eksternal lainnya untuk menarik log audit Anda yang mendukung format tertentu.
  • audit_log_exclude_accounts /audit_log_include_accounts - Digunakan untuk menentukan daftar pengguna yang dapat Anda sertakan atau kecualikan masing-masing ke nama paramnya. Menerima NULL jika tidak, daftar yang dipisahkan koma dalam format [email protected] atau 'pengguna'@'host'. Variabel-variabel ini saling eksklusif sehingga harus tidak disetel (yaitu nilainya NULL) satu atau yang lain
  • audit_log_include_commands /audit_log_exclude_commands  - Digunakan untuk menentukan daftar perintah (baik NULL atau daftar yang dipisahkan koma) yang pemfilteran menurut jenis perintah SQL diterapkan. Variabel-variabel ini saling eksklusif sehingga harus tidak disetel (yaitu nilainya NULL) satu atau yang lain. Untuk mendapatkan daftar jenis perintah SQL di MySQL atau Percona, lakukan hal berikut:
    • aktifkan variabel performance_schema=ON di my.cnf Anda (memerlukan restart server database)
    • Jalankan kueri berikut:SELECT GROUP_CONCAT(SUBSTRING_INDEX(name, '/', -1) ORDER BY name) sql_statement FROM performance_schema.setup_instruments WHERE name LIKE "statement/sql/%"\G
  • audit_log_include_databases /audit_log_exclude_databases - digunakan untuk menentukan filter menurut nama database dan dengan hubungannya dengan audit_log_{include,exclude}_commands untuk memfilter daftar perintah agar lebih terperinci saat masuk selama mengaudit log. Variabel ini saling eksklusif sehingga harus tidak disetel (yaitu nilainya NULL) satu atau yang lain.
  • audit_log_policy - Digunakan untuk menentukan peristiwa mana yang harus dicatat. Secara teknis, Anda dapat mengatur variabel ini secara dinamis untuk mengaktifkan atau menonaktifkan (menetapkan nilai ke NONE) untuk logging audit Anda. Nilai yang mungkin adalah:
    • SEMUA - semua acara akan dicatat
    • LOGIN - hanya login yang akan dicatat
    • QUERIES - hanya kueri yang akan dicatat
    • TIDAK ADA - tidak ada acara yang akan dicatat

Mengelola Plugin Log Audit

Seperti yang disebutkan, file log default masuk ke ${data_dir}/audit.log dan menggunakan format XML seperti contoh saya di bawah ini:

[[email protected] ~]# ls /var/lib/mysql/audit.log  | xargs tail -28

<AUDIT_RECORD

  NAME="Ping"

  RECORD="28692714_2020-10-28T19:12:18"

  TIMESTAMP="2020-10-29T09:39:56Z"

  COMMAND_CLASS="error"

  CONNECTION_ID="10"

  STATUS="0"

  SQLTEXT=""

  USER="cmon[cmon] @  [192.168.10.200]"

  HOST=""

  OS_USER=""

  IP="192.168.10.200"

  DB="information_schema"

/>

<AUDIT_RECORD

  NAME="Query"

  RECORD="28692715_2020-10-28T19:12:18"

  TIMESTAMP="2020-10-29T09:39:56Z"

  COMMAND_CLASS="show_status"

  CONNECTION_ID="10"

  STATUS="0"

  SQLTEXT="SHOW GLOBAL STATUS"

  USER="cmon[cmon] @  [192.168.10.200]"

  HOST=""

  OS_USER=""

  IP="192.168.10.200"

  DB="information_schema"

/>

Sekarang, mari kita kelola Plugin Log Audit Percona dalam skenario kasus nyata. Terinspirasi oleh karya Dani blog Percona, mari kita pertimbangkan untuk mengubah variabel berikut di my.cnf,

[[email protected] ~]# grep -i 'audit' /etc/my.cnf

## Audit Log

audit_log_format=JSON

audit_log_strategy=PERFORMANCE

audit_log_policy=QUERIES

audit_log_exclude_databases=s9s

Kalau begitu mari kita buat database dan tabel berikut,

CREATE DATABASE s9s;

CREATE TABLE `audit_records` ( `id` int unsigned NOT NULL AUTO_INCREMENT,  `audit_record` json,   PRIMARY KEY (`id`) ) ENGINE=InnoDB;

Kalau begitu mari kita gunakan pipa bernama atau FIFO di Linux untuk mengumpulkan log yang siap untuk diaudit tetapi yang nantinya dapat kita gunakan dengan layak.

$ mkfifo /tmp/s9s_fifo

$ exec 1<>/tmp/s9s_fifo

$ tail -f /var/lib/mysql/audit.log 1>/tmp/s9s_fifo 2>&1

Then, let's insert any logs to our table `s9s`.`audit_records` using the following script below,

#/bin/bash

pipe=/tmp/s9s_fifo

while true; do

    if read line <$pipe; then 

if [[ "$line" == 'quit' ]]; then 

break

fi 

mysql --show-warnings -vvv -e "INSERT INTO s9s.audit_records (audit_record) VALUES(\"${line//\"/\\\"}\")" 

    fi

done

Lalu saya mencoba menjalankan benchmark menggunakan sysbench. Sekarang, dengan entri berikut yang saya miliki,

mysql> select count(1) from audit_records\G

*************************** 1. row ***************************

count(1): 37856

1 row in set (0.11 sec)

Saya dapat melakukan beberapa audit menggunakan JSON yang memungkinkan saya untuk melakukan audit dan investigasi atau bahkan analisis kinerja database saya. Misalnya,

mysql> SELECT top10_select_insert from ((select audit_record->"$.audit_record" as top10_select_insert from audit_records  where audit_record->"$.audit_record.command_class" in ('select') order by audit_records.id desc limit 10) union all (select audit_record->"$.audit_record" as top10_select_insert from audit_records  where audit_record->"$.audit_record.command_class" in ('insert')  order by audit_records.id desc limit 10)) AS b\G

*************************** 1. row ***************************

top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @  [192.168.10.200]", "record": "326263176_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "SELECT DISTINCT c FROM sbtest1 WHERE id BETWEEN 5001 AND 5100 ORDER BY c", "timestamp": "2020-10-29T11:11:56Z", "command_class": "select", "connection_id": "25143"}

*************************** 2. row ***************************

top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @  [192.168.10.200]", "record": "326263175_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "SELECT c FROM sbtest4 WHERE id BETWEEN 4875 AND 4974 ORDER BY c", "timestamp": "2020-10-29T11:11:56Z", "command_class": "select", "connection_id": "25143"}

*************************** 3. row ***************************

top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @  [192.168.10.200]", "record": "326263174_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "SELECT SUM(k) FROM sbtest1 WHERE id BETWEEN 5017 AND 5116", "timestamp": "2020-10-29T11:11:56Z", "command_class": "select", "connection_id": "25143"}

*************************** 4. row ***************************

top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @  [192.168.10.200]", "record": "326263173_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "SELECT c FROM sbtest8 WHERE id BETWEEN 4994 AND 5093", "timestamp": "2020-10-29T11:11:56Z", "command_class": "select", "connection_id": "25153"}

*************************** 5. row ***************************

top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @  [192.168.10.200]", "record": "326263172_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "SELECT c FROM sbtest3 WHERE id=4976", "timestamp": "2020-10-29T11:11:56Z", "command_class": "select", "connection_id": "25153"}

*************************** 6. row ***************************

top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @  [192.168.10.200]", "record": "326263171_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "SELECT c FROM sbtest3 WHERE id=5018", "timestamp": "2020-10-29T11:11:56Z", "command_class": "select", "connection_id": "25153"}

*************************** 7. row ***************************

top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @  [192.168.10.200]", "record": "326263170_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "SELECT c FROM sbtest3 WHERE id=5026", "timestamp": "2020-10-29T11:11:56Z", "command_class": "select", "connection_id": "25153"}

*************************** 8. row ***************************

top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @  [192.168.10.200]", "record": "326263169_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "SELECT c FROM sbtest3 WHERE id=5711", "timestamp": "2020-10-29T11:11:56Z", "command_class": "select", "connection_id": "25153"}

*************************** 9. row ***************************

top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @  [192.168.10.200]", "record": "326263168_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "SELECT c FROM sbtest3 WHERE id=5044", "timestamp": "2020-10-29T11:11:56Z", "command_class": "select", "connection_id": "25153"}

*************************** 10. row ***************************

top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @  [192.168.10.200]", "record": "326263167_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "SELECT c FROM sbtest3 WHERE id=5637", "timestamp": "2020-10-29T11:11:56Z", "command_class": "select", "connection_id": "25153"}

*************************** 11. row ***************************

top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @  [192.168.10.200]", "record": "326263151_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "INSERT INTO sbtest9 (id, k, c, pad) VALUES (4998, 4986, '02171032529-62046503057-07366460505-11685363597-46873502976-33077071866-44215205484-05994642442-06380315383-02875729800', '19260637605-33008876390-94789070914-09039113107-89863581488')", "timestamp": "2020-10-29T11:11:56Z", "command_class": "insert", "connection_id": "25124"}

*************************** 12. row ***************************

top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @  [192.168.10.200]", "record": "326263133_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "INSERT INTO sbtest8 (id, k, c, pad) VALUES (6081, 4150, '18974493622-09995560953-16579360264-35381241173-70425414992-87533708595-45025145447-98882906947-17081170077-49181742629', '20737943314-90440646708-38143024644-95915967543-47972430163')", "timestamp": "2020-10-29T11:11:56Z", "command_class": "insert", "connection_id": "25133"}

*************************** 13. row ***************************

top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @  [192.168.10.200]", "record": "326263126_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "INSERT INTO sbtest2 (id, k, c, pad) VALUES (5014, 5049, '82143477938-07198858971-84944276583-28705099377-04269543238-74209284999-24766869883-70274359968-19384709611-56871076616', '89380034594-52170436945-89656244047-48644464580-26885108397')", "timestamp": "2020-10-29T11:11:56Z", "command_class": "insert", "connection_id": "25135"}

*************************** 14. row ***************************

top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @  [192.168.10.200]", "record": "326263119_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "INSERT INTO sbtest5 (id, k, c, pad) VALUES (4995, 3860, '07500343929-19373180618-48491497019-86674883771-87861925606-04683804124-03278606074-05397614513-84175620410-77007118978', '19374966620-11798221232-19991603086-34443959669-69834306417')", "timestamp": "2020-10-29T11:11:56Z", "command_class": "insert", "connection_id": "25142"}

*************************** 15. row ***************************

top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @  [192.168.10.200]", "record": "326263112_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "INSERT INTO sbtest10 (id, k, c, pad) VALUES (5766, 5007, '46189905191-42872108894-20541866044-43286474408-49735155060-20388245380-67571749662-72179825415-56363344183-47524887111', '24559469844-22477386116-04417716308-05721823869-32876821172')", "timestamp": "2020-10-29T11:11:56Z", "command_class": "insert", "connection_id": "25137"}

*************************** 16. row ***************************

top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @  [192.168.10.200]", "record": "326263083_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "INSERT INTO sbtest7 (id, k, c, pad) VALUES (5033, 4986, '20695843208-59656863439-60406010814-11793724813-45659184103-02803540858-01466094684-30557262345-15801610791-28290093674', '14178983572-33857930891-42382490524-21373835727-23623125230')", "timestamp": "2020-10-29T11:11:56Z", "command_class": "insert", "connection_id": "25118"}

*************************** 17. row ***************************

top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @  [192.168.10.200]", "record": "326263076_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "INSERT INTO sbtest1 (id, k, c, pad) VALUES (5029, 5016, '72342762580-04669595160-76797241844-46205057564-77659988460-00393018079-89701448932-22439638942-02011990830-97695117676', '13179789120-16401633552-44237908265-34585805608-99910166472')", "timestamp": "2020-10-29T11:11:56Z", "command_class": "insert", "connection_id": "25121"}

*************************** 18. row ***************************

top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @  [192.168.10.200]", "record": "326263036_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "INSERT INTO sbtest1 (id, k, c, pad) VALUES (5038, 5146, '62239893938-24763792785-75786071570-64441378769-99060498468-07437802489-36899434285-44705822299-70849806976-77287283409', '03220277005-21146501539-10986216439-83162542410-04253248063')", "timestamp": "2020-10-29T11:11:55Z", "command_class": "insert", "connection_id": "25127"}

*************************** 19. row ***************************

top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @  [192.168.10.200]", "record": "326263018_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "INSERT INTO sbtest4 (id, k, c, pad) VALUES (5004, 5028, '15487433957-59189974170-83116468418-96078631606-58760747556-09307871236-40520753062-17596570189-73692856496-38267942694', '98937710805-24695902707-05013528796-18454393948-39118534483')", "timestamp": "2020-10-29T11:11:55Z", "command_class": "insert", "connection_id": "25129"}

*************************** 20. row ***************************

top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @  [192.168.10.200]", "record": "326262989_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "INSERT INTO sbtest3 (id, k, c, pad) VALUES (5015, 5030, '30613877119-41343977889-67711116708-96041306890-46480766663-68231747217-07404586739-83073703805-75534384550-12407169697', '65220283880-37505643788-94809192635-84679347406-74995175373')", "timestamp": "2020-10-29T11:11:55Z", "command_class": "insert", "connection_id": "25139"}

20 rows in set (0.00 sec)

Gabungkan Log Audit Anda Dengan Alat Lain

Sekarang setelah Anda dapat mengurai output log audit, Anda dapat mulai menggabungkannya ke alat eksternal lainnya dan mulai menggabungkan dengan lingkungan atau tumpukan teknologi Anda saat ini selama ia membaca atau mendukung JSON. Misalnya, menggunakan ELK (Elasticsearch, Logstash Kibana) untuk mengurai dan memusatkan log Anda. Anda mungkin juga mencoba menggabungkan dengan Graylog atau Fluentd. Di sisi lain, Anda dapat membuat penampil Anda sendiri dan menggabungkannya dengan pengaturan perangkat lunak Anda saat ini. Menggunakan Log Audit Percona membuat hal-hal ini layak untuk dilakukan lebih banyak analisis dengan produktivitas tinggi dan tentu saja layak dan dapat diperluas juga.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memahami Granularitas Kunci di MySQL

  2. 8 Cara Menambahkan Satu Jam ke Datetime di MariaDB

  3. Apa yang Harus Diperiksa jika Pemanfaatan I/O MySQL Tinggi?

  4. Bagaimana TO_CHAR() Bekerja di MariaDB

  5. Gambar Docker Populer untuk Server MySQL dan MariaDB