सूचना प्रौद्योगिकी (आईटी) में ऑडिटिंग मान्यता प्राप्त मानकों या स्थापित नीतियों द्वारा लगाए गए आवश्यकताओं के अनुपालन को सुनिश्चित करने के लिए किसी संगठन के आईटी बुनियादी ढांचे की जांच करने की एक प्रक्रिया है। डेटा सुरक्षा नियम, जैसे कि नए GDPR नियम, उपयोगकर्ता डेटा की सुरक्षा के लिए अधिक कठोर होते जा रहे हैं, इसलिए यह महत्वपूर्ण है कि आपका डेटाबेस ऑडिट ठीक से सेट किया गया है ताकि यह सुनिश्चित हो सके कि आपका एप्लिकेशन और उपयोगकर्ता डेटा दोनों कमजोरियों से सुरक्षित हैं। इस ब्लॉग पोस्ट में, हम pgAudit पर चर्चा करेंगे - एक उपकरण जो PostgreSQL के ऑडिटिंग की सुविधा के लिए आवश्यक ऑडिट लॉग उत्पन्न करता है।
pgAudit क्या है?
PostgreSQL ऑडिट एक्सटेंशन, pgAudit, एक ओपन सोर्स एक्सटेंशन है जो एक विस्तृत ऑडिट लॉग में PostgreSQL डेटाबेस में ईवेंट लॉग करता है। यह मूल PostgreSQL लॉगिंग सुविधा का उपयोग करता है, इसलिए ऑडिट लॉग PostgreSQL लॉग का हिस्सा होंगे। विस्तार साइमन रिग्स, अभिजीत मेनन-सेन और इयान बारविक द्वारा लिखित द्वितीय चतुर्थांश पीजीऑडिट परियोजना पर आधारित है, और इसमें क्रंची डेटा से डेविड स्टील द्वारा संवर्द्धन शामिल हैं।
log_statement=all पर pgAudit क्यों?
हम केवल log_statement=all
सेट करके PostgreSQL में सभी स्टेटमेंट लॉग कर सकते हैं . तो पीजीऑडिट का इस्तेमाल बिल्कुल क्यों करें? मूल विवरण लॉगिंग (log_statement
. का उपयोग करके) ) केवल डेटाबेस के विरुद्ध किए गए कार्यों को सूचीबद्ध करेगा। यह संचालन को फ़िल्टर करने की क्षमता प्रदान नहीं करेगा, और लॉग ऑडिटिंग के लिए आवश्यक उचित स्वरूपण में नहीं होंगे। pgAudit अतिरिक्त रूप से READ
. जैसे बयानों के विशिष्ट वर्गों को लॉग करने के लिए ग्रैन्युलैरिटी प्रदान करता है (SELECT
और COPY
), WRITE
(INSERT
, UPDATE
, DELETE
, आदि), DDL
आदि। इसके अलावा, यह ऑब्जेक्ट लेवल ऑडिटिंग प्रदान करता है जहां केवल विशिष्ट संबंधों पर संचालन लॉग किया जाएगा।
मूल स्टेटमेंट लॉगिंग पर pgAudit का एक अन्य लाभ यह है कि यह केवल अनुरोधित ऑपरेशन को लॉग करने के बजाय किए गए ऑपरेशन का विवरण प्रदान करता है। उदाहरण के लिए, डीओ स्टेटमेंट का उपयोग करके अनाम कोड ब्लॉक को निष्पादित करने पर विचार करें।
DO $$ BEGIN EXECUTE 'CREATE TABLE import' || 'ant_table (id INT)'; END $$;
मूल स्टेटमेंट लॉगिंग का परिणाम होगा:
2020-12-20 23:40:11 UTC:157.230.232.139(53064):sgpostgres@test:[9091]: LOG: statement: DO $$ BEGIN EXECUTE 'CREATE TABLE import' || 'ant_table (id INT)'; END $$;
pgAudit उसी ऑपरेशन को लॉग करेगा जैसे:
2020-12-20 23:40:11 UTC:157.230.232.139(53064):sgpostgres@test:[9091]: LOG: AUDIT: SESSION,4,1,FUNCTION,DO,,,"DO $$ BEGIN EXECUTE 'CREATE TABLE import' || 'ant_table (id INT)'; END $$;",<not logged> 2020-12-20 23:40:11 UTC:157.230.232.139(53064):sgpostgres@test:[9091]: LOG: AUDIT: SESSION,4,2,DDL,CREATE TABLE,TABLE,public.important_table,CREATE TABLE important_table (id INT),<not logged>
उपरोक्त स्पष्ट रूप से pgAudit कार्यक्षमता को इंगित करता है जो ऑपरेशन और इसके आंतरिक को संरचित आउटपुट के साथ लॉग करता है जो खोज को आसान बनाता है।
pgAudit का उपयोग करके PostgreSQL का ऑडिट कैसे करेंट्वीट करने के लिए क्लिक करेंpgAudit कैसे स्थापित करें?
pgAudit एक एक्सटेंशन है जो PostgreSQL रिपॉजिटरी से डाउनलोड के लिए उपलब्ध है, या इसे स्रोत से संकलित और निर्मित किया जा सकता है। पहले चरण के रूप में, पैकेज को PostgreSQL चलाने वाली मशीन पर डाउनलोड और इंस्टॉल करने की आवश्यकता है (यह एक्सटेंशन पैकेज सभी स्केलग्रिड पोस्टग्रेएसक्यूएल परिनियोजन पर पूर्वस्थापित है)।
इंस्टॉल हो जाने के बाद, इसे PostgreSQL में लोड करना होगा। यह pgaudit
. जोड़कर हासिल किया जाता है shared_preload_libraries
. के लिए कॉन्फ़िगरेशन पैरामीटर। इस कॉन्फ़िगरेशन परिवर्तन के प्रभावी होने के लिए PostgreSQL के पुनरारंभ की आवश्यकता है। अगला चरण CREATE EXTENSION pgaudit
चलाकर डेटाबेस पर एक्सटेंशन को सक्षम करना है ।
अब जबकि एक्सटेंशन तैयार है, हमें लॉगिंग शुरू करने के लिए एक्सटेंशन के लिए कॉन्फ़िगरेशन पैरामीटर सेट करना सुनिश्चित करना होगा। यह पैरामीटर सेट करने जितना आसान हो सकता है pgaudit.log
all
value को महत्व देना और pgAudit session
में लॉग इन करना शुरू कर देगा मोड।
अब जब हम जानते हैं कि pgAudit को कैसे स्थापित और सक्षम करना है, तो आइए दो ऑडिट लॉगिंग मोड, सत्र और ऑब्जेक्ट पर चर्चा करें।
सत्र ऑडिट लॉगिंग
सत्र मोड में, pgAudit उपयोगकर्ता द्वारा किए गए सभी कार्यों को लॉग करेगा। pgaudit.log
सेट करना NONE
. के अलावा किसी भी परिभाषित मान के लिए पैरामीटर , सत्र ऑडिट लॉगिंग को सक्षम करेगा। pgaudit.log
पैरामीटर उन बयानों के वर्गों को निर्दिष्ट करता है जो सत्र मोड में लॉग किए जाएंगे। संभावित मान हैं:READ
, WRITE
, FUNCTION
, ROLE
, DDL
, MISC
, MISC_SET
, all
और NONE
।
pgaudit.log
सेट करना all
. के लिए पैरामीटर सभी बयानों को लॉग करेगा। पैरामीटर अल्पविराम से अलग की गई सूची का उपयोग करके कई वर्गों को स्वीकार कर सकता है और विशिष्ट वर्गों को - चिह्न के साथ बाहर रखा जा सकता है। उदाहरण के लिए, यदि आप MISC
. को छोड़कर सभी कथनों को लॉग करना चाहते हैं वर्ग, pgaudit.log
. का मान होगा ALL, -MISC, -MISC_SET
. आप pgaudit.log_relation
को सेट करके स्टेटमेंट में प्रत्येक संबंध संदर्भ के लिए एक अलग लॉग प्रविष्टि बनाने के लिए pgAudit को सक्षम भी कर सकते हैं। चालू करने के लिए।
तालिका बनाने के एक उदाहरण पर विचार करें। SQL कथन होगा:
CREATE TABLE persons(ID SERIAL PRIMARY KEY, LNAME varchar(20), FNAME varchar(20));
संबंधित ऑडिट लॉग प्रविष्टियां हैं:
2020-12-21 00:00:11 UTC:157.230.232.139(53178):sgpostgres@test:[11514]: LOG: AUDIT: SESSION,5,1,DDL,CREATE SEQUENCE,SEQUENCE,public.persons_id_seq,"CREATE TABLE persons(ID SERIAL PRIMARY KEY, LNAME varchar(20), FNAME varchar(20));",<not logged> 2020-12-21 00:00:11 UTC:157.230.232.139(53178):sgpostgres@test:[11514]: LOG: AUDIT: SESSION,5,1,DDL,CREATE TABLE,TABLE,public.persons,"CREATE TABLE persons(ID SERIAL PRIMARY KEY, LNAME varchar(20), FNAME varchar(20));",<not logged> 2020-12-21 00:00:11 UTC:157.230.232.139(53178):sgpostgres@test:[11514]: LOG: AUDIT: SESSION,5,1,DDL,CREATE INDEX,INDEX,public.persons_pkey,"CREATE TABLE persons(ID SERIAL PRIMARY KEY, LNAME varchar(20), FNAME varchar(20));",<not logged> 2020-12-21 00:00:11 UTC:157.230.232.139(53178):sgpostgres@test:[11514]: LOG: AUDIT: SESSION,5,1,DDL,ALTER SEQUENCE,SEQUENCE,public.persons_id_seq,"CREATE TABLE persons(ID SERIAL PRIMARY KEY, LNAME varchar(20), FNAME varchar(20));",<not logged>
ऑब्जेक्ट ऑडिट लॉगिंग
विशेष मामलों में, संबंधों के केवल एक विशिष्ट सेट का ऑडिट करने की आवश्यकता हो सकती है। ऐसे मामलों में, सत्र मोड का उपयोग करने से केवल अनावश्यक रूप से बड़ी संख्या में ऑडिट लॉग होंगे जो आवश्यक संबंधों के अनुरूप नहीं होंगे। ऑब्जेक्ट मोड इस उद्देश्य के लिए विशेष रूप से अनुकूल है और केवल संबंधों के एक विशिष्ट सेट का ऑडिट कर सकता है।
ऑब्जेक्ट ऑडिट लॉगिंग PostgreSQL भूमिकाओं का उपयोग करके प्राप्त की जाती है। एक भूमिका बनाई जा सकती है और केवल संबंधों के एक विशिष्ट सेट तक पहुंचने की अनुमति दी जा सकती है। यह भूमिका कॉन्फ़िगरेशन पैरामीटर में निर्दिष्ट की जानी चाहिए pgaudit.role
. ऑब्जेक्ट मोड केवल SELECT
का समर्थन करता है , INSERT
, UPDATE
और DELETE
बयान। लॉग किए गए कथनों की कक्षाएं भूमिका को दी गई अनुमतियों पर निर्भर करती हैं। उदाहरण के लिए, यदि भूमिका के पास केवल SELECT
करने की अनुमति है , तब केवल SELECT
बयान दर्ज किए जाएंगे।
नीचे ऑब्जेक्ट ऑडिट लॉगिंग का एक उदाहरण है:
एक भूमिका बनाएं और केवल SELECT
अनुमतियाँ। pgaudit.role
सेट करें उस भूमिका के लिए और SELECT
. चलाएँ SQL कथन:
CREATE ROLE audit_person; GRANT SELECT ON persons TO audit_person; SET pgaudit.role = 'audit_person'; SELECT * FROM persons WHERE ID=404;
उपरोक्त चयन कथन को इस प्रकार लॉग किया जाएगा:
2020-12-21 00:27:09 UTC:157.230.232.139(54900):sgpostgres@test:[21835]: LOG: AUDIT: OBJECT,10,1,READ,SELECT,TABLE,public.persons,select * from persons where ID=404;,<not logged>
|
ऑडिट लॉग प्रविष्टि की व्याख्या कैसे करें?
अब तक, हमने ऑडिट लॉग एंट्री कैसी दिखती है, इस पर हमने विवरण दिया है, अब ऑडिट लॉग एंट्री फॉर्मेट पर एक नजर डालते हैं। प्रत्येक प्रविष्टि PostgreSQL लॉगिंग के लिए उल्लिखित log_line_prefix से शुरू होती है, और फिर शेष आउटपुट CSV प्रारूप में होगा। निम्नलिखित सरल लेखापरीक्षा लॉग प्रविष्टि पर विचार करें:
2020-12-21 00:27:09 UTC:157.230.232.139(54900):sgpostgres@test:[21835]: LOG: AUDIT: OBJECT,10,1,READ,SELECT,TABLE,public.persons,select * from persons where ID=404;,<not logged>
उपरोक्त प्रविष्टि में, मान
2020-12-21 00:27:09 UTC:157.230.232.139(54900):sgpostgres@test:[21835]:
log_line_prefix प्रारूप से है %t:%r:%u@%d:[%p]:
. ऑडिट प्रविष्टि सामग्री LOG: AUDIT:
. से शुरू होती है मान और यह CSV प्रारूप का अनुसरण करता है। मान प्रारूप प्रपत्र का है:
AUDIT_TYPE,STATEMENT_ID,SUBSTATEMENT_ID,CLASS,COMMAND,OBJECT_TYPE,OBJECT_NAME,STATEMENT,PARAMETER
आइए प्रत्येक फ़ील्ड को एक-एक करके देखें:
फ़ील्ड | <वें शैली ="चौड़ाई:33%; पैडिंग:10पीएक्स; सीमा:1 पीएक्स ठोस #ईई; पृष्ठभूमि:#2डीए964; रंग:#fff;">विवरण <वें शैली ="चौड़ाई:33%; पैडिंग:10पीएक्स; सीमा:1 पीएक्स ठोस #ईई; पृष्ठभूमि:#2डीए964; रंग:#fff;">उदाहरण ऑडिट प्रविष्टि से मूल्य||
---|---|---|
AUDIT_TYPE | ऑडिट मोड इंगित करता है:SESSION या OBJECT | ऑब्जेक्ट |
STATEMENT_ID | प्रत्येक सत्र के लिए अद्वितीय कथन पहचानकर्ता | 10 |
SUBSTATEMENT_ID | मुख्य स्टेटमेंट में प्रत्येक सब स्टेटमेंट के लिए एक आइडेंटिफ़ायर | 1 |
क्लास | READ, WRITE आदि जैसे कथनों के वर्ग को इंगित करता है जो pgaudit.log पैरामीटर के लिए परिभाषित मान हैं। | पढ़ें |
COMMAND | SQL स्टेटमेंट में प्रयुक्त कमांड | चुनें |
OBJECT_TYPE | टेबल, INDEX, VIEW, आदि हो सकता है। | टेबल |
OBJECT_NAME | पूरी तरह से योग्य वस्तु का नाम | public.persons |
STATEMENT | वास्तविक स्टेटमेंट निष्पादित | उन व्यक्तियों में से * चुनें जहां ID=404; |
पैरामीटर | जब pgaudit.log_parameter को सही पर सेट किया जाता है, तो मौजूद होने पर पैरामीटर का उद्धृत CSV सूचीबद्ध होता है, या कोई पैरामीटर नहीं होने पर "कोई नहीं"। जब pgaudit.log_parameter सेट नहीं होता है, तो मान “<लॉग नहीं किया गया>” | होगा<लॉग्ड नहीं> |
अनुमान
pgAudit, अपनी सभी क्षमताओं के साथ, ऑडिट ट्रेल लॉग जनरेट करके ऑडिटिंग की प्रक्रिया को सरल बनाता है। हालांकि कुछ चेतावनियां हैं, जैसे एक ही नाम के तहत नामित वस्तुओं की लॉगिंग, यह अभी भी एक मजबूत उपकरण है जो आवश्यक कार्यक्षमता प्रदान करता है। हालाँकि, लॉग में लिखी गई ऑडिट जानकारी ऑडिटिंग प्रक्रिया के लिए आदर्श नहीं हो सकती है - ऑडिटिंग प्रक्रिया तब और भी बेहतर होती है जब उन लॉग को डेटाबेस स्कीमा में परिवर्तित किया जा सकता है, और ऑडिट डेटा को डेटाबेस में लोड किया जा सकता है ताकि आप आसानी से क्वेरी कर सकें जानकारी। यहीं पर PostgreSQL ऑडिट लॉग एनालाइज़र (pgAudit Analysis) मददगार होता है। अधिक जानकारी के लिए, pgAudit और pgAudit विश्लेषण के जीथब पेज देखें।