आपको अपने डेटाबेस के लिए ऑडिट प्लगइन का उपयोग करने की आवश्यकता क्यों है?
डेटाबेस में ऑडिटिंग इसके अर्थ से विचलित नहीं होती है क्योंकि यह एक ही अर्थ साझा करता है यानी ऐसे डेटाबेस ईवेंट/लेनदेन का निरीक्षण, जांच और मूल्यांकन करना जो आपके डेटाबेस में लॉग या निष्पादित किए जा रहे हैं। यह वास्तव में डेटाबेस के लिए विशेष रूप से एक सुरक्षा सुविधा के रूप में अधिक व्यवहार्यता जोड़ता है, क्योंकि यह प्रशासनिक पक्ष को डेटा के प्रबंधन और प्रसंस्करण के लिए संवेदनशील होने की सराहना करता है। यह डेटा प्रबंधन के लिए जिम्मेदारी और जवाबदेही को स्वीकार करता है।
डेटाबेस ऑडिट के लिए आवश्यक है कि प्रत्येक लेनदेन (यानी डीडीएल और डीएमएल) के लिए लॉग इन करना होगा ताकि ट्रेस रिकॉर्ड किया जा सके और डेटाबेस संचालन के दौरान क्या हो रहा है, इसका पूरा अवलोकन प्राप्त हो सके। इन कार्यों पर विचार किया जा सकता है:
- निगरानी और डिबग करने की क्षमता प्रदान करता है ताकि एप्लिकेशन पक्ष पर प्रदर्शन को बढ़ाया जा सके
- सुरक्षा और डेटा गोपनीयता अनुपालन जैसे PCI DSS, HIPAA, GDPR, आदि
- बहु-किरायेदारी परिवेशों के लिए विशिष्ट डेटा स्वायत्तता लेने की क्षमता प्रदान करता है। यह उन्हें डेटा विश्लेषण लेने की अनुमति देता है ताकि सुरक्षा और प्रदर्शन के लिए संवेदनशीलता और गोपनीयता के आधार पर लेनदेन को अलग और फ़िल्टर किया जा सके।
- डेटाबेस उपयोगकर्ताओं को खोजी संदिग्ध गतिविधि के आधार पर या इसकी भूमिका द्वारा सीमित अनुचित कार्यों से रोकने के लिए व्यवस्थापकीय कार्रवाइयां चलाता है। इसका मतलब है, पढ़ने वाले उपयोगकर्ताओं को, उदाहरण के लिए, केवल डेटा खींचने की अनुमति दी जाएगी और केवल विशिष्ट डेटाबेस तक सीमित पहुंच की अनुमति दी जाएगी, जिसके लिए वे केवल अपनी नौकरी की भूमिका के अनुसार या सीमित दायरे के लिए जिम्मेदार हैं।
पेरकोना ऑडिट लॉग प्लगइन क्या है?
आपके डेटाबेस में चल रहे लेन-देन या घटनाओं के ऑडिटिंग पर पिछले दृष्टिकोण एक भारी दृष्टिकोण हो सकते हैं। सामान्य लॉग फ़ाइल को सक्षम करना या या तो धीमी क्वेरी लॉग का उपयोग करना। यह एक सही तरीका नहीं है इसलिए ऑडिट लॉग प्लगइन अंतराल को भरने के लिए अधिक लचीलापन और अनुकूलन योग्य पैरामीटर जोड़ने का प्रबंधन करता है। Percona का दावा है कि उनका ऑडिट लॉग प्लगइन MySQL एंटरप्राइज ऑडिट का एक विकल्प है। हालांकि यह सच है, यहां एक चेतावनी है कि Percona का ऑडिट लॉग प्लगइन Oracle के MySQL के लिए इंस्टॉलेशन के लिए उपलब्ध नहीं है। इस बाइनरी के लिए कोई डाउनलोड करने योग्य टैरबॉल नहीं है, लेकिन मौजूदा Percona सर्वर या Percona XtraDB क्लस्टर इंस्टॉलेशन से मौजूदा ऑडिट_log.so फ़ाइल को कॉपी करके इंस्टॉल करना आसान है। MySQL समुदाय संस्करण के साथ ही Percona सर्वर के समान संस्करण के मौजूदा ऑडिट_लॉग.सो का उपयोग करने या कॉपी करने की अनुशंसा करना सबसे अच्छा है। इसलिए यदि आपका लक्ष्य MySQL समुदाय संस्करण 8.x का है, तो परकोना सर्वर 8.x संस्करण से भी Audit_log.so का उपयोग करें। हम आपको इस ब्लॉग पर बाद में एक MySQL समुदाय संस्करण पर यह दिखाएंगे कि यह कैसे करना है।
पेरकोना ऑडिट लॉग प्लगइन निश्चित रूप से ओपन-सोर्स है और यह मुफ्त में उपलब्ध है। इसलिए यदि आपका एंटरप्राइज़ एप्लिकेशन पेरकोना सर्वर या वेनिला MySQL जैसे बैकएंड डेटाबेस का उपयोग करता है, तो आप इस प्लगइन का उपयोग कर सकते हैं। MySQL एंटरप्राइज ऑडिट केवल MySQL एंटरप्राइज सर्वर के लिए उपलब्ध है और यह एक कीमत के साथ आता है। इसके अतिरिक्त, Percona लगातार इस सॉफ़्टवेयर को अद्यतन और रखरखाव कर रहा है और यह एक प्रमुख लाभ के रूप में आता है जैसे कि MySQL अपस्ट्रीम से कोई बड़ी रिलीज़ उपलब्ध है। Percona अपने प्रमुख संस्करण के आधार पर भी जारी करेगा और यह अपडेट और परीक्षण की गई कार्यक्षमता के साथ-साथ उनके ऑडिट लॉग प्लगइन टूल के लिए भी प्रभावित करता है। इसलिए इसके पिछले संस्करणों की किसी भी असंगति को MySQL के नवीनतम और सुरक्षित संस्करण के साथ काम करने के लिए अद्यतन किया जाएगा।
पेरकोना ऑडिट लॉग प्लगइन को एक सुरक्षा उपकरण के रूप में टैग किया गया है, लेकिन आइए हम इसे फिर से स्पष्ट करें। इस टूल का उपयोग लॉग की ऑडिटिंग के लिए किया जाता है। इसका एकमात्र उद्देश्य आपके डेटाबेस से लेनदेन के निशान लॉग करना है। यह फ़ायरवॉलिंग नहीं करता है और न ही यह विशिष्ट उपयोगकर्ताओं को ब्लॉक करने के लिए निवारक उपायों को लागू नहीं करता है। यह उपकरण मुख्य रूप से लॉग की ऑडिटिंग और डेटाबेस लेनदेन विश्लेषण के लिए उपयोग के लिए है।
पेरकोना ऑडिट लॉग प्लगइन का उपयोग करना
इस अनुभाग में, हम देखेंगे कि कैसे स्थापित करें, उपयोग करें, और विशेष रूप से वास्तविक दुनिया की स्थितियों में प्लगइन कितना फायदेमंद हो सकता है।
प्लगइन इंस्टॉल करना
Percona अपने डेटाबेस बायनेरिज़ के लिए विभिन्न स्रोतों के साथ आता है। एक बार जब आप डेटाबेस सर्वर को ठीक से स्थापित कर लेते हैं, तो मानक इंस्टॉलेशन ऑडिट लॉग प्लगइन साझा-ऑब्जेक्ट को /usr/lib64/mysql/plugin/audit_log.so में रख देगा। Percona/MySQL सर्वर के भीतर इसे सक्षम करने के तरीके के रूप में प्लगइन को स्थापित करना नीचे दिए गए कार्यों के साथ किया जा सकता है। यह चरण 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)
फिर चरण इस प्रकार हैं:
-
पहले सत्यापित करें कि प्लगइन मौजूद है या नहीं
## जांचें कि प्लगइन सक्षम या स्थापित है या नहीं
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)
-
प्लगइन इंस्टॉल करें,
## जाँचें कि प्लगइन्स कहाँ स्थित हैं
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
## तैयार है और फिर इंस्टॉल करें
mysql> INSTALL PLUGIN audit_log SONAME 'audit_log.so';
Query OK, 0 rows affected (0.01 sec)
-
इसे एक बार फिर से सत्यापित करें
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)
MySQL कम्युनिटी वर्जन पर Percona ऑडिट प्लगइन इंस्टॉल करना
Oracle MySQL संस्करणों पर स्थापित करते समय, जैसा कि हमने ऊपर उल्लेख किया है, हमेशा Percona सर्वर के संस्करण से मेल खाते हैं जहां से audio_log.so फ़ाइल आई है। तो उदाहरण के लिए, मेरे पास नीचे MySQL के निम्नलिखित संस्करण हैं,
nodeB $ mysqld --version
/usr/sbin/mysqld Ver 8.0.22 for Linux on x86_64 (MySQL Community Server - GPL)
जबकि, मेरा Percona सर्वर है,
nodeA $ mysqld --version
/usr/sbin/mysqld Ver 8.0.21-12 for Linux on x86_64 (Percona Server (GPL), Release 12, Revision 7ddfdfe)
आपको केवल Percona स्रोत से उस सर्वर पर कॉपी करना है जहां आपने MySQL समुदाय सर्वर स्थापित किया है।
nodeA $ scp /usr/lib64/mysql/plugin/audit_log.so nodeB:/tmp/
फिर /usr/lib64/mysql/plugin पर जाएं जिसके लिए प्लगइन्स स्थित होंगे।
[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
बाकी सभी, आप MySQL कम्युनिटी सर्वर के लिए Percona ऑडिट लॉगिन प्लगइन को स्थापित या सक्षम करना जारी रखने के लिए ऊपर बताए गए चरणों का पालन कर सकते हैं।
परकोना ऑडिट लॉग प्लगिन का कॉन्फ़िगरेशन और प्रबंधन
पेरकोना ऑडिट लॉग प्लगइन एक बहुत ही लचीला उपकरण है जो आपकी आवश्यकताओं को पूरा करने के लिए बहुत ही विन्यास योग्य या अनुकूलन योग्य है क्योंकि आप अपने डेटाबेस कनेक्शन या लेनदेन लॉग करते हैं। यह इसके दिए गए कॉन्फ़िगरेशन के लिए एक रैखिक फैशन कार्यान्वयन है, भले ही यह इसके दिए गए मापदंडों द्वारा अनुकूलित करने के लिए लचीला हो, केवल उन दिए गए मानों को लॉग किया जाएगा और आपके डेटाबेस के पूरे समय के दौरान ऑडिट किया जाएगा और यह डिफ़ॉल्ट रूप से एसिंक्रोनस रूप से किया जाता है। इस प्लगइन में प्रत्येक पैरामीटर चर महत्वपूर्ण हैं लेकिन नीचे सबसे महत्वपूर्ण पैरामीटर हैं जिनका उपयोग आप प्लगइन को कॉन्फ़िगर करने के लिए कर सकते हैं:
- ऑडिट_लॉग_रणनीति - ऑडिट लॉग रणनीति को निर्दिष्ट करने के लिए उपयोग किया जाता है और जब ऑडिट_लॉग_हैंडलर को FILE पर सेट किया जाता है। जो या तो निम्नलिखित मान संभव हैं:
- ASYNCHRONOUS - (डिफ़ॉल्ट) मेमोरी बफ़र का उपयोग करके लॉग करें, यदि बफ़र भरा हुआ है तो संदेश ड्रॉप न करें
- प्रदर्शन - मेमोरी बफ़र का उपयोग करके लॉग इन करें, यदि बफ़र भरा हुआ है तो संदेश छोड़ें
- SEMISYNCHRONOUS - सीधे फाइल करने के लिए लॉग इन करें, हर घटना को फ्लश और सिंक न करें
- SYNCHRONOUS - हर इवेंट को फाइल करने, फ्लश करने और सिंक करने के लिए सीधे लॉग इन करें
- ऑडिट_लॉग_फाइल - ऑडिट लॉग को स्टोर करने के लिए उपयोग किया जाने वाला फ़ाइल नाम, जो डिफ़ॉल्ट रूप से ${datadir}/audit.log फाइल करता है। आप अपने डेटाबेस के डेटादिर या पूर्ण फ़ाइल पथ से सापेक्ष फ़ाइल पथ का उपयोग कर सकते हैं।
- ऑडिट_लॉग_फ्लश - उपयोगी जब आपको लॉग को फ्लश करने की आवश्यकता होती है जैसे कि लॉगरोटेट के साथ समन्वय में उपयोग किया जा रहा है
- ऑडिट_लॉग_बफ़र_साइज़ - डिफ़ॉल्ट रूप से, Percona ऑडिट लॉग डिफ़ॉल्ट फ़ाइल लॉग में ट्रेस रिकॉर्ड करता है। यह चर तब उपयोगी होता है जब ऑडिट_लॉग_हैंडलर =फ़ाइल, और ऑडिट_लॉग_स्ट्रेटी =ASYNCHRONOUS या PERFORMANCE। जब सेट किया जाता है, तो इसका उपयोग लॉगिंग के लिए उपयोग किए जाने वाले मेमोरी बफर के आकार को निर्दिष्ट करने के लिए किया जाता है। यह आपको ऑडिटिंग लॉग सक्षम होने पर प्रदर्शन दंड गिरावट से बचने की अनुमति देता है।
- ऑडिट_लॉग_फॉर्मेट - अपनी ऑडिट लॉग फ़ाइल में जानकारी रिकॉर्ड करते या सहेजते समय निर्दिष्ट करने के लिए प्रारूप। प्रारूपों को पुराने/नए (एक्सएमएल प्रारूप पर आधारित), जेएसओएन, और सीएसवी के रूप में स्वीकार करता है। यह बहुत उपयोगी है, खासकर जब आप बाद में अन्य बाहरी उपकरणों के साथ अपने ऑडिट लॉग को शामिल करते हैं जो विशिष्ट प्रारूपों का समर्थन करते हैं।
- ऑडिट_लॉग_बहिष्कृत_खाते /audit_log_include_accounts - उन उपयोगकर्ताओं की सूची निर्दिष्ट करने के लिए उपयोग किया जाता है जिन्हें आप इसके परम नाम से संबंधित शामिल या बहिष्कृत कर सकते हैं। NULL को स्वीकार करता है अन्यथा [email protected] या 'user'@'host' के प्रारूप में अल्पविराम से अलग की गई सूची। ये चर परस्पर अनन्य हैं इसलिए इसे एक या दूसरे को अनसेट करना होगा (अर्थात मान NULL है)
- audit_log_include_commands /audit_log_exclude_commands - कमांड की सूची (या तो NULL या अल्पविराम से अलग की गई सूची) को निर्दिष्ट करने के लिए उपयोग किया जाता है जिसके लिए SQL कमांड प्रकार द्वारा फ़िल्टरिंग लागू की जाती है। ये चर परस्पर अनन्य हैं इसलिए इसे अनसेट होना चाहिए (अर्थात मान NULL है) एक या दूसरे। MySQL या Percona में SQL कमांड प्रकारों की सूची प्राप्त करने के लिए, निम्न कार्य करें:
- अपने my.cnf में performance_schema=ON वैरिएबल सक्षम करें (डेटाबेस सर्वर पुनरारंभ की आवश्यकता है)
- निम्न क्वेरी चलाएँ:GROUP_CONCAT(SUBSTRING_INDEX(name, '/', -1) ORDER by name) sql_statement से performance_schema.setup_instruments चुनें जहां नाम "कथन/एसक्यूएल/%"\G जैसा है। ली>
- ऑडिट_लॉग_include_databases /audit_log_exclude_databases - डेटाबेस नाम से फ़िल्टर करने के लिए निर्दिष्ट करने के लिए और ऑडिट_लॉग_{शामिल, बहिष्कृत}_कमांड के संयोजन के साथ कमांड की सूची को फ़िल्टर करने के लिए उपयोग किया जाता है ताकि ऑडिटिंग लॉग के दौरान लॉगिंग करते समय अधिक बारीक हो। ये चर परस्पर अनन्य हैं इसलिए इसे एक या दूसरे से अनसेट (यानी मान NULL है) होना चाहिए।
- ऑडिट_लॉग_पॉलिसी - यह निर्दिष्ट करने के लिए उपयोग किया जाता है कि कौन से ईवेंट लॉग किए जाने चाहिए। तकनीकी रूप से, आप इस चर को अपने ऑडिट लॉगिंग के लिए सक्षम या अक्षम करने के लिए गतिशील रूप से सेट कर सकते हैं (मान को कोई नहीं पर सेट करें)। संभावित मान हैं:
- सभी - सभी इवेंट लॉग किए जाएंगे
- LOGINS - केवल लॉगिन लॉग किए जाएंगे
- QUERIES - केवल क्वेरी लॉग की जाएंगी
- कोई नहीं - कोई इवेंट लॉग नहीं किया जाएगा
ऑडिट लॉग प्लगइन का प्रबंधन
जैसा कि बताया गया है, डिफ़ॉल्ट लॉग फ़ाइल ${data_dir}/audit.log पर जाती है और नीचे दिए गए मेरे उदाहरण की तरह XML प्रारूप का उपयोग करती है:
[[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"
/>
अब, पेरकोना ऑडिट लॉग प्लगइन को वास्तविक स्थिति में प्रबंधित करते हैं। पेरकोना के दानी ब्लॉग के काम से प्रेरित होकर, आइए 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
फिर निम्नलिखित डेटाबेस और टेबल बनाते हैं,
CREATE DATABASE s9s;
CREATE TABLE `audit_records` ( `id` int unsigned NOT NULL AUTO_INCREMENT, `audit_record` json, PRIMARY KEY (`id`) ) ENGINE=InnoDB;
फिर आइए लिनक्स में ए नामित पाइप या फीफो का उपयोग ऑडिटिंग के लिए तैयार लॉग्स को इकट्ठा करने के लिए करें लेकिन जिसे हम बाद में व्यावहारिक रूप से उपयोग कर सकते हैं।
$ 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
फिर मैंने sysbench का उपयोग करके बेंचमार्क चलाने का प्रयास किया। अब, मेरे पास निम्नलिखित प्रविष्टियाँ हैं,
mysql> select count(1) from audit_records\G
*************************** 1. row ***************************
count(1): 37856
1 row in set (0.11 sec)
मैं JSON का उपयोग करके कुछ ऑडिटिंग कर सकता हूं जो मेरे लिए ऑडिटिंग और जांच या यहां तक कि मेरे डेटाबेस का प्रदर्शन विश्लेषण करना संभव बना रहा है। उदाहरण के लिए,
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)
अपने ऑडिट लॉग को अन्य टूल से एकत्रित करें
अब जब आप अपने ऑडिट लॉग के आउटपुट को पार्स करने में सक्षम हैं, तो आप इसे अन्य बाहरी टूल में शामिल करना शुरू कर सकते हैं और जब तक यह JSON को पढ़ता या समर्थन करता है, तब तक आप अपने वर्तमान परिवेश या प्रौद्योगिकी स्टैक के साथ एकत्र करना शुरू कर सकते हैं। उदाहरण के लिए, अपने लॉग को पार्स और केंद्रीकृत करने के लिए ELK (इलास्टिक्स खोज, लॉगस्टैश किबाना) का उपयोग करना। आप ग्रेलॉग या फ्लुएंट के साथ शामिल करने का भी प्रयास कर सकते हैं। दूसरी ओर, आप अपना स्वयं का दर्शक बना सकते हैं और अपने वर्तमान सॉफ़्टवेयर सेटअप के साथ शामिल कर सकते हैं। Percona ऑडिट लॉग का उपयोग करना इन चीजों को उच्च उत्पादकता के साथ अधिक विश्लेषण करने के लिए संभव बनाता है और निश्चित रूप से व्यवहार्य और एक्स्टेंसिबल भी है।