MariaDB
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> MariaDB

Sử dụng Plugin nhật ký kiểm tra Percona để bảo mật cơ sở dữ liệu

Tại sao bạn cần sử dụng plugin kiểm tra cho cơ sở dữ liệu của mình?

Kiểm toán trong cơ sở dữ liệu không đi lệch khỏi ý nghĩa của nó vì nó có cùng ý nghĩa, tức là kiểm tra, kiểm tra và đánh giá các sự kiện / giao dịch cơ sở dữ liệu đang được ghi lại hoặc thực hiện trong cơ sở dữ liệu của bạn. Trên thực tế, nó bổ sung thêm tính khả thi cho cơ sở dữ liệu, đặc biệt là tính năng bảo mật, vì nó khen ngợi phía quản trị là nhạy cảm trong việc quản lý và xử lý dữ liệu. Nó bao hàm trách nhiệm và trách nhiệm giải trình đối với việc quản lý dữ liệu.

Kiểm tra Cơ sở dữ liệu yêu cầu rằng đối với mọi giao dịch (tức là DDL và DML) phải được ghi lại để ghi lại dấu vết và có được tổng quan đầy đủ về những gì đang xảy ra trong quá trình hoạt động của cơ sở dữ liệu. Các thao tác này có thể được xem xét:

  • Cung cấp khả năng giám sát và gỡ lỗi để tăng hiệu suất ở phía ứng dụng
  • Tuân thủ bảo mật và quyền riêng tư dữ liệu như PCI DSS, HIPAA, GDPR, v.v.
  • Cung cấp khả năng tự chủ dữ liệu cụ thể cho các môi trường cho thuê nhiều người. Điều này cho phép họ thực hiện phân tích dữ liệu để phân biệt và lọc các giao dịch dựa trên mức độ nhạy cảm và quyền riêng tư để cân nhắc về bảo mật và hiệu suất.
  • Thúc đẩy các hành động quản trị để ngăn người dùng cơ sở dữ liệu thực hiện các hành động không phù hợp dựa trên hoạt động điều tra đáng ngờ hoặc bị giới hạn bởi vai trò của nó. Điều này có nghĩa là người dùng đã đọc, chẳng hạn, chỉ được phép lấy dữ liệu và chỉ có quyền truy cập hạn chế vào cơ sở dữ liệu cụ thể mà họ chỉ chịu trách nhiệm hoặc với phạm vi giới hạn phù hợp với vai trò công việc của họ.

Plugin nhật ký kiểm tra Percona là gì?

Các cách tiếp cận trước đây về kiểm tra các giao dịch hoặc sự kiện đang chạy trong cơ sở dữ liệu của bạn có thể là một cách tiếp cận nặng nề. Bật tệp nhật ký chung hoặc sử dụng nhật ký truy vấn chậm. Đó không phải là một cách tiếp cận hoàn hảo, vì vậy plugin nhật ký kiểm tra quản lý để thêm các thông số linh hoạt hơn và có thể tùy chỉnh để lấp đầy khoảng trống. Percona tuyên bố Plugin nhật ký kiểm tra của họ là một giải pháp thay thế cho Kiểm toán doanh nghiệp MySQL. Mặc dù điều đó là đúng, nhưng có một lưu ý ở đây là Plugin nhật ký kiểm tra của Percona không có sẵn cho MySQL của Oracle để cài đặt. Không có tarball có thể tải xuống cho tệp nhị phân này nhưng rất dễ cài đặt bằng cách chỉ sao chép tệp Audit_log.so hiện có từ Máy chủ Percona hiện có hoặc cài đặt Cụm Percona XtraDB. Tốt nhất bạn nên sử dụng hoặc sao chép Audit_log.so hiện có của cùng một phiên bản Máy chủ Percona với phiên bản cộng đồng MySQL. Vì vậy, nếu phiên bản Cộng đồng MySQL mục tiêu của bạn là 8.x, thì hãy sử dụng Audit_log.so từ phiên bản Percona Server 8.x. Chúng tôi sẽ chỉ cho bạn cách thực hiện việc này trên phiên bản cộng đồng MySQL sau trên blog này.

Percona Audit Log Plugin tất nhiên là mã nguồn mở và nó có sẵn để sử dụng miễn phí. Vì vậy, nếu ứng dụng doanh nghiệp của bạn sử dụng cơ sở dữ liệu phụ trợ như Máy chủ Percona hoặc MySQL vani, thì bạn có thể sử dụng plugin này. MySQL Enterprise Audit chỉ khả dụng cho MySQL Enterprise Server và điều đó đi kèm với một mức giá. Ngoài ra, Percona liên tục cập nhật và bảo trì phần mềm này và đây là một lợi thế lớn như thể có bất kỳ bản phát hành chính nào từ ngược dòng MySQL. Percona cũng sẽ phát hành dựa trên phiên bản chính của nó và điều đó ảnh hưởng đến các bản cập nhật và chức năng đã thử nghiệm cũng như cho công cụ plugin nhật ký kiểm tra của họ. Vì vậy, bất kỳ sự không tương thích nào từ các phiên bản trước của nó cũng sẽ được cập nhật để hoạt động với phiên bản MySQL mới nhất và an toàn nhất.

Percona Audit Log Plugin được gắn thẻ là một trong những công cụ bảo mật nhưng hãy để chúng tôi làm rõ điều này một lần nữa. Công cụ này được sử dụng để kiểm tra nhật ký. Mục đích duy nhất là ghi lại dấu vết của các giao dịch từ cơ sở dữ liệu của bạn. Nó không làm tường lửa cũng như không áp dụng các biện pháp ngăn chặn để chặn những người dùng cụ thể. Công cụ này chủ yếu để kiểm tra nhật ký và sử dụng để phân tích giao dịch cơ sở dữ liệu.

Sử dụng Plugin nhật ký kiểm tra Percona

Trong phần này, chúng ta sẽ xem xét cách cài đặt, sử dụng và lợi ích của plugin, đặc biệt là trong các tình huống thực tế.

Cài đặt Trình cắm

Percona có nhiều nguồn khác nhau cho các tệp nhị phân cơ sở dữ liệu của họ. Khi bạn cài đặt máy chủ cơ sở dữ liệu đúng cách, cài đặt tiêu chuẩn sẽ đặt plugin shared-object của nhật ký kiểm tra trong /usr/lib64/mysql/plugin/audit_log.so. Cài đặt plugin như một cách để kích hoạt nó trong máy chủ Percona / MySQL có thể được thực hiện bằng các hành động sau đây. Các bước này được thực hiện bằng 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)

Sau đó, các bước như sau:

  1. Trước tiên hãy xác minh xem plugin có tồn tại hay không

## Kiểm tra xem plugin đã được bật hoặc cài đặt chưa

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. Cài đặt plugin,

## Kiểm tra vị trí của các 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

## Sẵn sàng rồi cài đặt

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

Query OK, 0 rows affected (0.01 sec)
  1. Xác minh lại lần nữa

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)

Cài đặt Trình cắm Kiểm tra Percona Qua Phiên bản Cộng đồng MySQL

Khi cài đặt trên các phiên bản Oracle MySQL, như những gì chúng tôi đã đề cập ở trên, luôn khớp với phiên bản của Máy chủ Percona nơi xuất phát tệp Aud_log.so. Vì vậy, ví dụ:tôi có các phiên bản sau của MySQL bên dưới,

nodeB $  mysqld --version

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

Trong khi, Máy chủ Percona của tôi là,

nodeA $ mysqld --version

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

Tất cả những gì bạn cần làm là sao chép từ nguồn Percona vào máy chủ mà bạn đã cài đặt Máy chủ cộng đồng MySQL.

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

Sau đó chuyển đến / usr / lib64 / mysql / plugin mà plugin sẽ được đặt.

[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

Tất cả phần còn lại, bạn có thể làm theo các bước như đã nêu ở trên để tiếp tục cài đặt hoặc bật Plugin đăng nhập kiểm tra Percona cho Máy chủ cộng đồng MySQL.

Cấu hình và quản lý Plugin nhật ký kiểm tra Percona

Percona Audit Log Plugin là một công cụ rất linh hoạt có thể cấu hình hoặc tùy chỉnh để đáp ứng các yêu cầu của bạn khi bạn ghi lại các kết nối hoặc giao dịch cơ sở dữ liệu của mình. Đó là một triển khai thời trang tuyến tính cho cấu hình đã cho của nó, vì vậy ngay cả khi nó linh hoạt được tùy chỉnh theo các tham số nhất định của nó, chỉ những giá trị nhất định đó mới được ghi lại và kiểm tra trong toàn bộ thời gian cơ sở dữ liệu của bạn chạy và nó được thực hiện không đồng bộ theo mặc định. Mọi biến tham số trong plugin này đều quan trọng nhưng dưới đây là các tham số quan trọng nhất mà bạn có thể sử dụng để định cấu hình plugin:

  • Aud_log_strategy - Được sử dụng để chỉ định chiến lược nhật ký kiểm tra và khi Audit_log_handler được đặt thành FILE. giá trị nào sau đây là có thể:
    • ASYNCHRONOUS - (mặc định) ghi nhật ký sử dụng bộ đệm bộ nhớ, không thả thư nếu bộ đệm đầy
    • HIỆU SUẤT - ghi nhật ký bằng bộ nhớ đệm, thả thông báo nếu bộ đệm đầy
    • SEMISYNCHRONOUS - đăng nhập trực tiếp vào tệp, không xóa và đồng bộ hóa mọi sự kiện
    • ĐỒNG BỘ - đăng nhập trực tiếp vào tệp, xóa và đồng bộ hóa mọi sự kiện
  • Aud_log_file - Tên tệp được sử dụng để lưu trữ nhật ký kiểm tra, được đặt mặc định là tệp $ {datadir} /audit.log. Bạn có thể sử dụng đường dẫn tệp tương đối từ datadir của cơ sở dữ liệu hoặc đường dẫn tệp tuyệt đối.
  • Audit_log_flush - Hữu ích khi bạn cần làm sạch nhật ký chẳng hạn như được sử dụng phối hợp với logrotate
  • Aud_log_buffer_size - Theo mặc định, Percona Audit Log ghi lại các dấu vết vào nhật ký tệp mặc định. Biến này hữu ích khi Audit_log_handler =FILE và Audit_log_strategy =ASYNCHRONOUS hoặc PERFORMANCE. Khi được đặt, nó được sử dụng để chỉ định kích thước của bộ đệm bộ nhớ được sử dụng để ghi nhật ký. Điều này cho phép bạn tránh bị giảm hiệu suất phạt khi bật nhật ký kiểm tra.
  • Audit_log_format - Định dạng để chỉ định khi ghi hoặc lưu thông tin vào tệp nhật ký kiểm toán của bạn. Chấp nhận các định dạng CŨ / MỚI (dựa trên định dạng XML), JSON và CSV. Điều này rất hữu ích, đặc biệt khi bạn kết hợp sau này với các công cụ bên ngoài khác để lấy nhật ký kiểm tra hỗ trợ các định dạng cụ thể.
  • Aud_log_exclude_accounts / Audit_log_include_accounts - Được sử dụng để chỉ định danh sách người dùng mà bạn có thể bao gồm hoặc loại trừ tương ứng với tên tham số của nó. Chấp nhận NULL nếu không thì danh sách được phân tách bằng dấu phẩy ở định dạng [email protected] hoặc 'user' @ 'host'. Các biến này loại trừ lẫn nhau, vì vậy nó phải được bỏ đặt (tức là giá trị là NULL) cái này hay cái khác
  • Aud_log_include_commands / Audit_log_exclude_commands - Được sử dụng để chỉ định danh sách lệnh (danh sách NULL hoặc được phân tách bằng dấu phẩy) áp dụng tính năng lọc theo kiểu lệnh SQL. Các biến này loại trừ lẫn nhau vì vậy nó phải được bỏ đặt (tức là giá trị là NULL) cái này hay cái khác. Để nhận danh sách các loại lệnh SQL trong MySQL hoặc Percona, hãy làm như sau:
    • bật biến performance_schema =ON trong my.cnf của bạn (yêu cầu khởi động lại máy chủ cơ sở dữ liệu)
    • Chạy truy vấn sau: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 - được sử dụng để chỉ định lọc theo tên cơ sở dữ liệu và kết hợp với Aud_log_ {bao gồm, loại trừ} _commands để lọc danh sách lệnh sao cho chi tiết hơn khi ghi nhật ký trong quá trình kiểm tra nhật ký. Các biến này loại trừ lẫn nhau, vì vậy nó phải không được đặt (nghĩa là giá trị là NULL) cái này hay cái khác.
  • Audit_log_policy - Được sử dụng để chỉ định sự kiện nào nên được ghi lại. Về mặt kỹ thuật, bạn có thể đặt biến này động để bật hoặc tắt (đặt giá trị thành NONE) cho nhật ký kiểm tra của mình. Giá trị có thể là:
    • TẤT CẢ - tất cả các sự kiện sẽ được ghi lại
    • ĐĂNG NHẬP - chỉ các thông tin đăng nhập mới được ghi lại
    • QUERIES - chỉ các truy vấn mới được ghi lại
    • KHÔNG - không có sự kiện nào sẽ được ghi lại

Quản lý Trình cắm Nhật ký Kiểm tra

Như đã đề cập, tệp nhật ký mặc định đi tới $ {data_dir} /audit.log và sử dụng định dạng XML giống như ví dụ của tôi bên dưới:

[[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"

/>

Bây giờ, hãy quản lý Plugin nhật ký kiểm tra Percona trong trường hợp thực tế. Lấy cảm hứng từ công việc trên blog Percona của Dani, hãy xem xét việc thay đổi các biến sau trong 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

Sau đó, hãy tạo cơ sở dữ liệu và bảng sau,

CREATE DATABASE s9s;

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

Sau đó, hãy sử dụng một đường dẫn được đặt tên hoặc FIFO trong Linux để thu thập nhật ký sẵn sàng cho việc kiểm tra nhưng sau này chúng ta có thể sử dụng khả thi.

$ 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

Sau đó, tôi đã thử chạy điểm chuẩn bằng sysbench. Bây giờ, với các mục sau tôi có,

mysql> select count(1) from audit_records\G

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

count(1): 37856

1 row in set (0.11 sec)

Tôi có thể thực hiện một số kiểm tra bằng cách sử dụng JSON, điều này giúp tôi khả thi khi thực hiện kiểm tra và điều tra hoặc thậm chí là phân tích hiệu suất cơ sở dữ liệu của mình. Ví dụ,

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)

Tổng hợp nhật ký kiểm tra của bạn bằng các công cụ khác

Bây giờ bạn đã có thể phân tích cú pháp đầu ra của nhật ký kiểm tra, bạn có thể bắt đầu kết hợp nó với các công cụ bên ngoài khác và bắt đầu tổng hợp với môi trường hoặc ngăn xếp công nghệ hiện tại của bạn miễn là nó đọc hoặc hỗ trợ JSON. Ví dụ:sử dụng ELK (Elasticsearch, Logstash Kibana) để phân tích cú pháp và tập trung các nhật ký của bạn. Bạn cũng có thể thử kết hợp với Graylog hoặc Fluentd. Mặt khác, bạn có thể tạo trình xem của riêng mình và kết hợp với thiết lập phần mềm hiện tại của bạn. Việc sử dụng Percona Audit Log giúp những điều này trở nên khả thi để thực hiện nhiều phân tích hơn với năng suất cao và tất nhiên cũng khả thi và có thể mở rộng.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách DATE_FORMAT () hoạt động trong MariaDB

  2. Cách lập lịch sao lưu cơ sở dữ liệu với ClusterControl

  3. So sánh Amazon RDS Point-in-Time Recovery với ClusterControl

  4. Giám sát bảo mật cơ sở dữ liệu cho MySQL và MariaDB

  5. Cách REGEXP_REPLACE () hoạt động trong MariaDB