आपके डेटा को यथासंभव सुरक्षित रखने और आपके डेटाबेस में क्या हो रहा है, यह जानने के लिए ऑडिटिंग एक अच्छा तरीका है। यह कई सुरक्षा नियमों या मानकों के लिए भी आवश्यक है, जैसे पीसीआई - भुगतान कार्ड उद्योग। यह आपके PostgreSQL डेटाबेस के लिए अपवाद नहीं है।
PostgreSQL ने अपने सिद्ध आर्किटेक्चर, विश्वसनीयता, डेटा अखंडता, मजबूत फीचर सेट, एक्स्टेंसिबिलिटी, और सॉफ्टवेयर के पीछे ओपन सोर्स समुदाय के समर्पण के लिए एक मजबूत प्रतिष्ठा अर्जित की है ताकि लगातार प्रदर्शनकारी और अभिनव समाधान प्रदान किया जा सके।पी>
ऐसा कहा जा रहा है, यह एक PostgreSQL डेटाबेस का ऑडिट करने का विकल्प होना चाहिए, है ना? अच्छा, तो जवाब हैं हां। इस ब्लॉग में, हम देखेंगे कि pgAudit एक्सटेंशन क्या है और इसे अपने PostgreSQL डेटाबेस में कैसे स्थापित और उपयोग करना है।
pgAudit क्या है?
पोस्टग्रेएसक्यूएल ऑडिट एक्सटेंशन (पीजीऑडिट) मानक पोस्टग्रेएसक्यूएल लॉगिंग सुविधा के माध्यम से विस्तृत सत्र और ऑब्जेक्ट ऑडिट लॉगिंग प्रदान करता है।
लॉग_स्टेटमेंट =सभी के साथ मानक लॉगिंग सुविधा द्वारा मूल विवरण लॉगिंग प्रदान की जा सकती है। यह निगरानी और अन्य बुनियादी उपयोगों के लिए स्वीकार्य है लेकिन ऑडिटिंग के लिए आम तौर पर आवश्यक विवरण का स्तर प्रदान नहीं करता है। डेटाबेस के विरुद्ध किए गए सभी कार्यों की सूची होना पर्याप्त नहीं है। लेखापरीक्षक के लिए रुचिकर विशेष विवरण प्राप्त करना भी संभव होना चाहिए। मानक लॉगिंग सुविधा दिखाती है कि उपयोगकर्ता ने क्या अनुरोध किया था, जबकि पीजीऑडिट इस बात पर ध्यान केंद्रित करता है कि डेटाबेस के अनुरोध को पूरा करने के दौरान क्या हुआ था।
PgAudit को PostgreSQL पर कैसे स्थापित करें
इस उदाहरण के लिए, हम CentOS 7 इंस्टॉलेशन का उपयोग करेंगे। इस बिंदु पर, हमें लगता है कि आपने अपना PostgreSQL डेटाबेस स्थापित कर लिया है, अन्यथा, आप इस ब्लॉग पोस्ट का अनुसरण कर सकते हैं और इसे ClusterControl का उपयोग करके आसान तरीके से चला सकते हैं।
अब, आपके OS में PostgreSQL रिपॉजिटरी होनी चाहिए, कुछ इस तरह:
$ cat /etc/yum.repos.d/postgresql.repo
# PGDG Red Hat Enterprise Linux / CentOS stable common repository for all PostgreSQL versions
[pgdg-common]
name=PostgreSQL common for RHEL/CentOS $releasever - $basearch
baseurl=http://download.postgresql.org/pub/repos/yum/common/redhat/rhel-$releasever-$basearch
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
# PGDG Red Hat Enterprise Linux / CentOS stable repositories:
[pgdg]
name=PostgreSQL 12 $releasever - $basearch
#baseurl=http://yum.postgresql.org/12/redhat/rhel-$releasever-$basearch
baseurl=http://download.postgresql.org/pub/repos/yum/12/redhat/rhel-$releasever-$basearch/
enabled=1
gpgcheck=0
[pgdg-source]
name=PostgreSQL 12 $releasever - $basearch - Source
baseurl=http://yum.postgresql.org/srpms/12/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=0
यदि आप उपलब्ध pgaudit पैकेजों की जांच करते हैं, तो आपके पास यह होना चाहिए:
pgaudit14_12.x86_64 : PostgreSQL Audit Extension
तो, चलिए इसे इंस्टॉल करते हैं:
$ yum install pgaudit14_12
अब, आपको इसे /var/lib/pgsql/12/data/postgresql.conf में डिफ़ॉल्ट रूप से स्थित postgresql.conf कॉन्फ़िगरेशन फ़ाइल में जोड़ना होगा, और लागू करने के लिए PostgreSQL सेवा को पुनरारंभ करना होगा परिवर्तन।
shared_preload_libraries = 'pgaudit, pg_stat_statements'
अपनी डेटाबेस सेवा को फिर से शुरू करने के बाद, आपको एक्सटेंशन बनाना होगा:
postgres=# CREATE EXTENSION pgaudit;
CREATE EXTENSION
And now, you can run the following query to check the new extension created:
postgres=# SELECT * FROM pg_available_extensions WHERE name LIKE '%audit%';
name | default_version | installed_version | comment
---------+-----------------+-------------------+---------------------------------
pgaudit | 1.4.1 | 1.4.1 | provides auditing functionality
(1 row)
pgऑडिट कॉन्फ़िगरेशन
आप निम्न क्वेरी चलाकर वर्तमान कॉन्फ़िगरेशन को सत्यापित कर सकते हैं:
postgres=# SELECT name,setting FROM pg_settings WHERE name LIKE 'pgaudit%';
name | setting
----------------------------+---------
pgaudit.log | none
pgaudit.log_catalog | on
pgaudit.log_client | off
pgaudit.log_level | log
pgaudit.log_parameter | off
pgaudit.log_relation | off
pgaudit.log_statement_once | off
pgaudit.role |
(8 rows)
आइए इन मापदंडों को एक-एक करके देखें।
- pgaudit.log :निर्दिष्ट करता है कि सत्र ऑडिट लॉगिंग द्वारा किस वर्ग के कथनों को लॉग किया जाएगा। डिफ़ॉल्ट कोई नहीं है। संभावित मान हैं:
- पढ़ें:चुनें और कॉपी करें जब स्रोत कोई संबंध या क्वेरी हो।
- लिखें:जब गंतव्य एक संबंध हो तो INSERT, UPDATE, DELETE, TRUNCATE, और COPY करें।
- FUNCTION:फंक्शन कॉल और DO ब्लॉक।
- भूमिका:भूमिकाओं और विशेषाधिकारों से संबंधित विवरण:GRANT, REVOKE, CREATE/ALTER/DROP ROLE.
- DDL:सभी DDL जो ROLE क्लास में शामिल नहीं हैं।
- MISC:विविध कमांड, उदा. त्यागें, प्राप्त करें, चेकपॉइंट, वैक्यूम, सेट करें।
- MISC_SET:विविध SET कमांड, उदा. भूमिका निर्धारित करें।
- ALL:उपरोक्त सभी को शामिल करें।
- pgaudit.log_catalog :निर्दिष्ट करता है कि सत्र लॉगिंग को उस स्थिति में सक्षम किया जाना चाहिए जहां एक बयान में सभी संबंध pg_catalog में हैं। इस सेटिंग को अक्षम करने से लॉग में psql और PgAdmin जैसे टूल से शोर कम हो जाएगा जो कैटलॉग को भारी रूप से क्वेरी करते हैं। डिफ़ॉल्ट चालू है।
- pgaudit.log_client :निर्दिष्ट करता है कि लॉग संदेश क्लाइंट प्रक्रिया जैसे psql को दिखाई देगा या नहीं। यह सेटिंग आम तौर पर अक्षम छोड़ दी जानी चाहिए लेकिन डिबगिंग या अन्य उद्देश्यों के लिए उपयोगी हो सकती है। डिफ़ॉल्ट बंद है।
- pgaudit.log_level :लॉग स्तर निर्दिष्ट करता है जिसका उपयोग लॉग प्रविष्टियों के लिए किया जाएगा। इस सेटिंग का उपयोग प्रतिगमन परीक्षण के लिए किया जाता है और परीक्षण या अन्य उद्देश्यों के लिए अंतिम उपयोगकर्ताओं के लिए भी उपयोगी हो सकता है। डिफ़ॉल्ट लॉग है।
- pgaudit.log_parameter :निर्दिष्ट करता है कि ऑडिट लॉगिंग में वे पैरामीटर शामिल होने चाहिए जो कथन के साथ पारित किए गए थे। जब पैरामीटर मौजूद होंगे तो उन्हें स्टेटमेंट टेक्स्ट के बाद CSV फॉर्मेट में शामिल किया जाएगा। डिफ़ॉल्ट बंद है।
- pgaudit.log_relation :निर्दिष्ट करता है कि क्या सत्र ऑडिट लॉगिंग को SELECT या DML स्टेटमेंट में संदर्भित प्रत्येक संबंध (तालिका, दृश्य, आदि) के लिए एक अलग लॉग प्रविष्टि बनानी चाहिए। ऑब्जेक्ट ऑडिट लॉगिंग का उपयोग किए बिना संपूर्ण लॉगिंग के लिए यह एक उपयोगी शॉर्टकट है। डिफ़ॉल्ट बंद है।
- pgaudit.log_statement_once :निर्दिष्ट करता है कि क्या लॉगिंग में स्टेटमेंट टेक्स्ट और पैरामीटर शामिल होंगे जिसमें स्टेटमेंट/सबस्टेटमेंट संयोजन के लिए पहली लॉग एंट्री होगी या प्रत्येक एंट्री के साथ। इस सेटिंग को अक्षम करने से वर्बोज़ लॉगिंग कम हो जाएगी लेकिन लॉग प्रविष्टि उत्पन्न करने वाले कथन को निर्धारित करना अधिक कठिन हो सकता है, हालांकि प्रक्रिया आईडी के साथ कथन/उपकथन जोड़ी पिछली प्रविष्टि के साथ लॉग किए गए कथन टेक्स्ट की पहचान करने के लिए पर्याप्त होनी चाहिए। डिफ़ॉल्ट बंद है।
- pgaudit.role :ऑब्जेक्ट ऑडिट लॉगिंग के लिए उपयोग की जाने वाली मास्टर भूमिका निर्दिष्ट करता है। एकाधिक लेखा परीक्षा भूमिकाओं को मास्टर भूमिका प्रदान करके परिभाषित किया जा सकता है। यह कई समूहों को ऑडिट लॉगिंग के विभिन्न पहलुओं के प्रभारी होने की अनुमति देता है। कोई डिफ़ॉल्ट नहीं है।
pgऑडिट उपयोग
अब हमने कॉन्फ़िगरेशन पैरामीटर की समीक्षा कर ली है, आइए एक उदाहरण देखें कि वास्तविक दुनिया में इसका उपयोग कैसे किया जाए।
सभी रीड, राइट और डीडीएल प्रश्नों का ऑडिट करने के लिए, रन करें:
test1=# set pgaudit.log = 'read,write,ddl';
SET
और फिर, निम्नलिखित वाक्य चलाएँ:
test1=# CREATE TABLE table1 (id int, name text);
CREATE TABLE
test1=# INSERT INTO table1 (id, name) values (1, 'name1');
INSERT 0 1
test1=# INSERT INTO table1 (id, name) values (2, 'name2');
INSERT 0 1
test1=# INSERT INTO table1 (id, name) values (3, 'name3');
INSERT 0 1
test1=# SELECT * FROM table1;
id | name
----+-------
1 | name1
2 | name2
3 | name3
(3 rows)
यदि आप PostgreSQL लॉग फ़ाइल की जांच करते हैं, तो आप इसे देखेंगे:
2020-11-20 19:17:13.848 UTC [25142] LOG: AUDIT: SESSION,3,1,DDL,CREATE TABLE,,,"CREATE TABLE table1 (id int, name text);",<not logged>
2020-11-20 19:18:45.334 UTC [25142] LOG: AUDIT: SESSION,4,1,WRITE,INSERT,,,"INSERT INTO table1 (id, name) values (1, 'name1');",<not logged>
2020-11-20 19:18:52.332 UTC [25142] LOG: AUDIT: SESSION,5,1,WRITE,INSERT,,,"INSERT INTO table1 (id, name) values (2, 'name2');",<not logged>
2020-11-20 19:18:58.103 UTC [25142] LOG: AUDIT: SESSION,6,1,WRITE,INSERT,,,"INSERT INTO table1 (id, name) values (3, 'name3');",<not logged>
2020-11-20 19:19:07.261 UTC [25142] LOG: AUDIT: SESSION,7,1,READ,SELECT,,,SELECT * FROM table1;,<not logged>
बेशक, यह एक बुनियादी उदाहरण है। आप अपने व्यवसाय में फिट होने के लिए पिछले अनुभाग में वर्णित कॉन्फ़िगरेशन पैरामीटर का उपयोग कर सकते हैं।
ClusterControl के साथ pgAudit को सक्षम करना
pgAudit को मैन्युअल रूप से स्थापित करने और सक्षम करने के बजाय, एक अन्य विकल्प आपके लिए काम करने के लिए ClusterControl CLI का उपयोग करना है। इसके लिए आप अपने ClusterControl सर्वर से निम्न कमांड चला सकते हैं:
$ s9s cluster --setup-audit-logging --cluster-id=ID
जहां आईडी PostgreSQL क्लस्टर आईडी है।
चलते समय, आप ClusterControl कार्य की जाँच करके स्थिति की निगरानी कर सकते हैं। सबसे पहले, आपको जॉब आईडी की आवश्यकता होगी, जिसे आप जॉब लिस्ट से प्राप्त कर सकते हैं:
$ s9s job --list
163 18 RUNNING test_dba admins 19:41:45 90% Setup Audit Logging
अब, कार्य विवरण देखें:
$ s9s job --log --job-id=163
Using SSH credentials from cluster.
Cluster ID is 18.
The username is 'root'.
10.10.10.129:5432: Configuring audit logging.
10.10.10.129:5432: Installing 'pgaudit14_12'.
10.10.10.129:5432: Setting pgaudit.log to ROLE,DDL,MISC.
Writing file '10.10.10.129:/var/lib/pgsql/12/data/postgresql.conf'.
10.10.10.129:5432: Restarting PostgreSQL node.
10.10.10.129: waiting for server to shut down.... done
server stopped
waiting for server to start....2020-11-20 19:41:52.069 UTC [25137] LOG: pgaudit extension initialized
2020-11-20 19:41:52.069 UTC [25137] LOG: starting PostgreSQL 12.5 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
2020-11-20 19:41:52.069 UTC [25137] LOG: listening on IPv4 address "0.0.0.0", port 5432
2020-11-20 19:41:52.069 UTC [25137] LOG: listening on IPv6 address "::", port 5432
2020-11-20 19:41:52.080 UTC [25137] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2020-11-20 19:41:52.102 UTC [25137] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432"
2020-11-20 19:41:52.130 UTC [25137] LOG: redirecting log output to logging collector process
2020-11-20 19:41:52.130 UTC [25137] HINT: Future log output will appear in directory "log".
done
server started
10.10.10.129:5432: Waiting for node to be accessible.
10.10.10.129:5432: pgaudit 1.4.1 is enabled.
इस क्रिया के लिए एक डेटाबेस सेवा पुनरारंभ की आवश्यकता होगी जिसे ClusterControl द्वारा उसी कार्य में निष्पादित किया जाएगा। इसे पुनः आरंभ करने के बाद, pgAudit एक्सटेंशन सक्षम है और उपयोग के लिए तैयार है:
postgres=# SELECT * FROM pg_available_extensions WHERE name LIKE '%audit%';
name | default_version | installed_version | comment
---------+-----------------+-------------------+---------------------------------
pgaudit | 1.4.1 | 1.4.1 | provides auditing functionality
(1 row)
बस! अब आप pgAudit को उसी तरह कॉन्फ़िगर और उपयोग कर सकते हैं जैसा हमने पहले दिखाया था।
निष्कर्ष
कई सुरक्षा नियमों के लिए ऑडिटिंग आवश्यक है और यह तब भी उपयोगी है जब आप जानना चाहते हैं कि आपके डेटाबेस में क्या हुआ और इसके लिए कब और कौन जिम्मेदार था।
इस ब्लॉग में, हमने आपके PostgreSQL डेटाबेस के ऑडिट के लिए pgAudit PostgreSQL एक्सटेंशन के बारे में बात की, और हमने आपको यह भी दिखाया कि इसे मैन्युअल रूप से और ClusterControl CLI का उपयोग करके कैसे कार्यान्वित किया जाए।
ध्यान रखें कि, कॉन्फ़िगरेशन के आधार पर, pgAudit के लिए बड़ी मात्रा में डेटा उत्पन्न करना संभव है। इसलिए, आपको यह निर्धारित करने में सावधानी बरतनी चाहिए कि आपको क्या ऑडिट करने की आवश्यकता है और कितने समय के लिए।