Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle डेटाबेस सुरक्षा:डेटाबेस ऑडिटिंग

इस लेख में, मैं Oracle डेटाबेस सुरक्षा जारी रखूंगा और Oracle में मानक डेटाबेस ऑडिटिंग, ऑडिट ट्रिगर और ऑडिट नीतियों के बारे में कुछ महत्वपूर्ण तथ्य प्रस्तुत करूंगा। डेटाबेस ऑडिटिंग में दो घटक होते हैं:स्थापित डेटाबेस गतिविधि सेट और घटनाओं की निगरानी और लगातार पंजीकरण। डेटाबेस ऑडिटिंग के उद्देश्य गैर-अस्वीकृति, संदिग्ध गतिविधियों की जांच, प्राधिकरण (संसाधन पहुंच) के संबंध में कॉन्फ़िगरेशन द्वारा उत्पन्न समस्याओं का पता लगाना, वास्तविक कानून और नियंत्रण का अनुपालन करना है।

मानक ऑडिटिंग

हम किन गतिविधियों का ऑडिट करते हैं? डेटाबेस को प्रारंभ करने और रोकने के साथ-साथ डेटाबेस व्यवस्थापक द्वारा किए गए कनेक्शन का Oracle द्वारा परोक्ष रूप से ऑडिट किया जाता है और डेटा स्वचालित रूप से ऑपरेटिंग सिस्टम में संग्रहीत हो जाता है। नीचे दी गई तालिका अन्य गतिविधियों को दिखाती है जिन पर नज़र रखी जा सकती है:

हम लेखापरीक्षित गतिविधियों को कहां रखते हैं?

  • डेटाबेस में , डेटाबेस ऑडिट ट्रेल का उपयोग करते हुए, जहां हमारे पास दो संभावनाएं हैं:
    • ऑडिट_ट्रेल =डीबी
      जो निम्नलिखित कोड के साथ किया जा सकता है:

      alter system set audit_trail=db scope=spfile;
    • ऑडिट_ट्रेल =DB,EXTENDED
      निम्न कोड का उपयोग करके:

      alter system set audit_trail= db, extended scope=spfile;

    DB और DB, EXTENDED के बीच का अंतर यह है कि दूसरा SYS.AUD$ टेबल के SQLBIND और SQLTEXT CLOB कॉलम को पॉप्युलेट करता है।

  • बाहरी , निम्नलिखित संभावनाओं के साथ ऑपरेटिंग सिस्टम ऑडिट ट्रेल का उपयोग करते हुए:
    • ऑडिट_ट्रेल =ओएस
      और इस्तेमाल किया गया कोड है:

      alter system set audit_trail=os scope=spfile;
    • ऑडिट_ट्रेल =एक्सएमएल और AUDIT_FILE_DEST =फ़ाइल पथ (अंतर्निहित $ORACLE_BASE/admin/$ORACLE_SID/adump)
      कोड के साथ:

      alter system set audit_trail=xml scope=spfile;

संग्रहीत लेखापरीक्षित गतिविधियों के वर्तमान विन्यास को खोजने के लिए, कोई निम्न क्वेरी चला सकता है, जिसे लोअरकेस के साथ लिखा गया है:

select value from v$parameter where name='audit_trail';

अधिक उपयोगी आदेश:

[टेबल आईडी=43 /]

आइए अब डेटाबेस ऑडिटिंग के कुछ उदाहरण देखें।

डेटाबेस में संग्रहीत लेखापरीक्षित जानकारी के साथ मानक ऑडिट का एक उदाहरण यहां दिया गया है:

ऑडिट की गई जानकारी में डेटाबेस टेबल पर निष्पादित SELECT स्टेटमेंट होते हैं।

SQL डेवलपर में, निम्न स्क्रिप्ट निष्पादित करें:

alter system set audit_trail= db, extended scope=spfile;
AUDIT SELECT TABLE;

उसके बाद, डेटाबेस को पुनरारंभ करना होगा। ऐसा करने के लिए, SQLPlus टर्मिनल में, उपयोगकर्ता नाम sys के साथ sysdba / पासवर्ड के रूप में कनेक्ट करें और निम्नलिखित कथन चलाएँ:

SHUTDOWN IMMEDIATE
STARTUP

ध्यान दें कि उपरोक्त आकार एक सिस्टम से दूसरे सिस्टम में भिन्न होते हैं।

यह सत्यापित करने के लिए कि क्या ऑडिट ट्रेल सही तरीके से सेट है, निम्नलिखित क्वेरी चलाएँ:

select value from v$parameter where name='audit_trail';

या:

show parameter audit_trail;

जब आप ऑडिट रोकना चाहते हैं, तो निष्पादित करें:

NOAUDIT SELECT TABLE;

यह देखने के लिए कि लेखापरीक्षा द्वारा कौन से कथन दर्ज किए गए थे, आप इसका उपयोग कर सकते हैं:

select dbms_lob.substr( sqltext, 4000, 1 )
from SYS.AUD$
where OBJ$NAME IN ('EMPLOYEES','DEPARTMENTS','JOBS','LOCATIONS');

या

select count(*), OBJ$NAME, USERID
from SYS.AUD$
where OBJ$NAME IN ('EMPLOYEES','DEPARTMENTS','JOBS','LOCATIONS')
group by rollup (OBJ$NAME, USERID);

एक अन्य उदाहरण मानक पथ में XML फ़ाइल में संग्रहीत लेखापरीक्षित डेटा के साथ मानक ऑडिट के लिए है।

alter system set audit_trail=xml scope=spfile;
AUDIT SELECT, INSERT, UPDATE, DELETE ON employees WHENEVER NOT
SUCCESSFUL;

फिर से, डेटाबेस को पुनरारंभ करें:SQLPlus टर्मिनल से उपयोगकर्ता नाम sys के साथ sysdba / पासवर्ड के रूप में कनेक्ट करें और SHUTDOWN IMMEDIATE और STARTUP कमांड चलाएँ।

फिर, हर बार कर्मचारी तालिका पर कोई क्वेरी, सम्मिलित करें, अद्यतन करें और हटाएं विफल रहता है, इसे XML फ़ाइल में दर्ज किया जाना चाहिए।

जब हम ऑडिट को रोकना चाहते हैं, तो हम डेटाबेस विकास परिवेश में निम्नलिखित कमांड चलाते हैं:

NOAUDIT ALL;
NOAUDIT ALL ON DEFAULT;

और डिफ़ॉल्ट ऑडिट ट्रेल को पुनर्स्थापित करें:

alter system set audit_trail=db scope=spfile;

नीचे XML ऑडिट फ़ाइल के एक भाग का उदाहरण दिया गया है:

हम लेखापरीक्षित जानकारी को कैसे हटाते हैं?

ऑडिट की गई गतिविधियों की संख्या और उनकी आवृत्ति के कारण ऑडिट किए गए डेटा की मात्रा बहुत बड़ी हो सकती है। यही कारण है कि समय-समय पर ऑडिट किए गए डेटा को संग्रहीत करने और इसे उत्पादन प्रणाली से हटाने की सिफारिश की जाती है।

यदि ऑडिट किए गए डेटा को डेटाबेस (डेटाबेस ऑडिट ट्रेल) में संग्रहीत किया जाता है, तो हम डिलीट स्टेटमेंट का उपयोग कर सकते हैं (लेकिन डेटा को संग्रहीत करने के बाद ही!):

DELETE FROM SYS.AUD$;

आप किसी विशिष्ट डेटाबेस ऑब्जेक्ट के लिए ऑडिट की गई जानकारी को हटाना चुन सकते हैं, उदाहरण के लिए, उत्पादों नामक एक तालिका:

DELETE FROM SYS.AUD$ WHERE OBJ$NAME='PRODUCTS';

ऑडिट ट्रिगर

ट्रिगर एक पीएल/एसक्यूएल ब्लॉक या पीएल/एसक्यूएल प्रक्रिया का कॉल स्टेटमेंट है जो हर बार किसी घटना के होने पर स्वचालित रूप से निष्पादित होता है। ट्रिगर दो प्रकार के होते हैं:डेटाबेस स्तर पर (डेटाबेस स्टेटमेंट) और एप्लिकेशन स्तर पर (उदाहरण के लिए Oracle फॉर्म पर एक बटन को पुश करना)। ऑडिटिंग के लिए उपयोग किए जाने वाले ट्रिगर डेटाबेस स्तर के ट्रिगर होते हैं। वे निम्नलिखित श्रेणियों में वर्गीकृत करते हैं:

  • DML ट्रिगर - जहां एक टेबल पर DML स्टेटमेंट ट्रिगर होता है। रिकॉर्ड की संख्या (स्टेटमेंट स्तर पर ट्रिगर) की परवाह किए बिना उन ट्रिगर्स को कमांड स्तर पर एक बार निष्पादित किया जा सकता है या उन्हें हर पंक्ति (रिकॉर्ड स्तर पर ट्रिगर) के लिए निष्पादित किया जा सकता है। रिकॉर्ड स्तर के ट्रिगर के प्रकार:कथन से पहले, कथन के बाद, प्रत्येक पंक्ति से पहले, प्रत्येक पंक्ति के बाद;
  • ट्रिगर के बजाय - जहां एक दृश्य पर एक डीएमएल स्टेटमेंट ट्रिगर होता है;
  • सिस्टम ट्रिगर - डेटाबेस को शुरू/बंद करने, डीडीएल स्टेटमेंट, यूजर लॉगइन/लॉगआउट जैसी घटनाओं से ट्रिगर होता है। सिस्टम ट्रिगर के प्रकार:घटना के बाद, घटना से पहले।

SYS.TRIGGER$ की क्वेरी कर रहा है तालिका या ALL_TRIGGERS दृश्य सभी डेटाबेस स्तर ट्रिगर्स के बारे में जानकारी प्रदान करता है। उदाहरण के लिए, डेटाबेस से अलग ट्रिगर प्रकार निम्नानुसार पाया जा सकता है:

SELECT DISTINCT TRIGGER_TYPE FROM ALL_TRIGGERS;

DBA_TRIGGERS दृश्य स्थापना के समय Oracle उत्पादों द्वारा स्वचालित रूप से बनाए गए ट्रिगर के बारे में जानकारी प्रदान करता है। यदि हम सिस्टम ट्रिगर्स ('ईवेंट से पहले' और 'ईवेंट के बाद') के बारे में जानकारी प्राप्त करना चाहते हैं, तो हम निम्नलिखित कथन चला सकते हैं:

SELECT SUBSTR(OWNER,1,20) OWNER ,SUBSTR(TRIGGER_NAME,1,30),
TRIGGER_NAME, SUBSTR(TRIGGERING_EVENT,1,30) TRIGGERING_EVENT,
TRIGGER_TYPE
FROM DBA_TRIGGERS
WHERE TRIGGER_TYPE='BEFORE EVENT' OR TRIGGER_TYPE='AFTER EVENT'
ORDER BY TRIGGER_TYPE DESC;

साथ ही, स्थापना के समय, डीएमएल ट्रिगर स्वचालित रूप से एचआर उपयोगकर्ता स्कीमा पर बनाए जाते हैं:

SELECT SUBSTR(TABLE_NAME,1,20) TABLE_NAME,
SUBSTR(TRIGGER_TYPE,1,30) TRIGGER_TYPE,TRIGGER_BODY
FROM DBA_TRIGGERS
WHERE OWNER='HR';

ऑडिटिंग के लिए, हम वांछित जानकारी रिकॉर्ड करने के लिए कस्टमाइज़्ड ट्रिगर्स बना सकते हैं, लेकिन ऑडिट की गई जानकारी को स्टोर करने के लिए एक विशेष टेबल बनाना चाहिए।

यह सुनिश्चित करना महत्वपूर्ण है कि विकसित ट्रिगर सामान्य डेटाबेस गतिविधि को प्रभावित नहीं करते हैं। ऑडिटिंग का उद्देश्य सामान्य, दिन-प्रतिदिन की डेटाबेस गतिविधि की निष्क्रिय निगरानी करना और बाद में विश्लेषण के लिए इसे स्टोर करना है। नतीजतन, लक्ष्य तालिका से ऑडिट तालिका में परिणाम वापस करने के लिए ट्रिगर्स के बजाय बनाने की अनुशंसा नहीं की जाती है।

विवरण स्तर पर DML ट्रिगर रिकॉर्ड स्तर पर DML ट्रिगर के साथ सह-अस्तित्व में हो सकते हैं। कॉल का क्रम है:

  • बयान से पहले ट्रिगर करें
  • प्रभावित प्रत्येक रिकॉर्ड के लिए
    • रिकॉर्ड से पहले ट्रिगर करें
    • वर्तमान डीएमएल कार्रवाई
    • रिकॉर्ड के बाद ट्रिगर करें
  • बयान के बाद ट्रिगर करें

उपयोगकर्ता द्वारा परिभाषित ट्रिगर केवल तभी निष्पादित किए जाएंगे, जब Oracle के अनुसार, कथन सही है और हो सकता है। गलत डीएमएल स्टेटमेंट या किसी बाधा का उल्लंघन करने वाले के लिए, एक त्रुटि वापस कर दी जाएगी और ट्रिगर निष्पादित नहीं किया जाएगा। इसलिए, ऑडिटिंग के लिए, विशेष रूप से एलएमडी ट्रिगर्स को स्टेटमेंट स्तर पर उपयोग करने की सिफारिश की जाती है।

ऑडिट ट्रिगर का उदाहरण:

आइए मान लें कि हम कंपनी के कर्मचारियों के लिए 20000 से अधिक वेतन (मुद्रा यहां महत्वपूर्ण नहीं है) स्थापित करने वाले डीएमएल स्टेटमेंट के बारे में एक ऑडिट टेबल (जिसे TAB_AUDIT_EMP कहा जाता है) में रिकॉर्ड करने के लिए एक ट्रिगर बनाना चाहते हैं। हम TAB_AUDIT_EMP में क्वेरी की अनुक्रम संख्या, उपयोगकर्ता नाम, सत्र, होस्ट और दिनांक संग्रहीत करना चाहते हैं।

यह निम्नलिखित के साथ किया जा सकता है:

CREATE TABLE TAB_AUDIT_EMP

(secv_id NUMBER(3) PRIMARY KEY,
username VARCHAR2(20),
session_nr NUMBER(10),
hostname VARCHAR2(100),
query_date DATE
);

CREATE SEQUENCE secv_aud_emp START WITH 1 INCREMENT BY 1;
CREATE OR REPLACE TRIGGER huge_salary
AFTER INSERT OR UPDATE OR DELETE OF SALARY ON EMPLOYEES
FOR EACH ROW WHEN (NEW.salary>20000)
BEGIN
INSERT INTO TAB_AUDIT_EMP
VALUES(secv_aud_emp.NEXTVAL , sys_context('userenv', 'session_user'), sys_context('userenv', 'sessionid'), sys_context('userenv', 'host'), sysdate);
END;

मान लें कि हम किसी विशिष्ट विभाग के कर्मचारियों के वेतन में संशोधन करते हैं:

UPDATE EMPLOYEES
SET SALARY=25000
WHERE ID_DEPARTMENT = 1;

और फिर हम निगरानी की पुष्टि करते हैं:

select secv_id, substr(username,1,20) username, session_nr, substr(hostname,1,30) hostname, query_date
from TAB_AUDIT_EMP;

ऑडिट नीतियां

तीसरी ऑडिटिंग विधि ऑडिट नीतियों को संदर्भित करती है। लेखापरीक्षा नीति की परिभाषा में निम्नलिखित शामिल हैं:

  • ऑब्जेक्ट की विशिष्टता (स्कीमा, ऑब्जेक्ट का नाम, कॉलम) निगरानी के अधीन है
  • ऑब्जेक्ट के लिए ऑडिट की गई कार्रवाइयों का विवरण (SELECT, INSERT, UPDATE, DELETE):परोक्ष रूप से यह SELECT है
  • शर्तों का विवरण जो लेखापरीक्षित जानकारी को रिकॉर्ड करने के लिए पूरा किया जाना चाहिए, यह ट्रिगर के WHEN क्लॉज में किया जाता है और वैकल्पिक है
  • एक ईवेंट हैंडलर जो ईवेंट को अतिरिक्त रूप से संभालता है, जो कि यह वैकल्पिक है।

एक ऑडिट नीति सक्रिय (सक्षम स्थिति) या निष्क्रिय (अक्षम स्थिति) हो सकती है। लेखापरीक्षा नीतियों की सूची ALL_AUDIT_POLICIES दृश्य से पूछताछ करके प्राप्त की जा सकती है:

SELECT POLICY_TEXT, ENABLED
FROM ALL_AUDIT_POLICIES

लेखापरीक्षा नीति व्यवस्थापन के लिए हमारे पास DBMS_FGA पैकेज है। इस पैकेज का उपयोग करने के लिए, उन उपयोगकर्ताओं को विशेषाधिकार देना आवश्यक है जो PL/SQL कोड लिखेंगे:

grant execute on dbms_fga to username;

लेखापरीक्षा नीति का उदाहरण:

हम DML कथनों को रिकॉर्ड करने के लिए एक ऑडिट नीति बनाना चाहते हैं जो DEPARTMENTS तालिका में प्रबंधकों (MANAGER_ID) को संशोधित करता है। हम नीति के लिए एक हैंडलर बनाना चुन सकते हैं, जिसे proc_audit_alert कहा जाता है, जो हमें प्रबंधक के बारे में एक संशोधन की सूचना देता है:

CREATE OR REPLACE PROCEDURE proc_audit_alert ( object_schema VARCHAR2, object_name VARCHAR2, policy_name VARCHAR2 ) AS
BEGIN
DBMS_OUTPUT.PUT_LINE('Alert! Manager Changed !');
END;

और यह नीति हो सकती है:

CREATE OR REPLACE PROCEDURE proc_audit_manager AS
BEGIN
DBMS_FGA.ADD_POLICY
(
object_schema=>'ADMINDB',
object_name=>'DEPARTMENTS',
policy_name=>'proc_audit_manager',
audit_column=>'ID_MANAGER',
enable=>false,
statement_types=>'UPDATE',
handler_module=>'proc_audit_alert'
);
DBMS_FGA.ENABLE_POLICY
( object_schema=>'ADMINDB',
object_name=>'DEPARTMENTS',
policy_name=>'proc_audit_manager');
END;

ध्यान दें कि आप जिस नीति को लिखना चाहते हैं, उसके लिए object_schema, object_name, policy_name, ऑडिट_कॉलम, स्टेटमेंट_टाइप और हैंडलर_मॉड्यूल को अनुकूलित किया जाना चाहिए।

फिर, हम प्रक्रिया निष्पादित करते हैं:

EXECUTE proc_audit_manager;

हम सत्यापित कर सकते हैं कि क्या नीति सक्षम है:

SELECT ENABLED, POLICY_NAME
FROM ALL_AUDIT_POLICIES
WHERE OBJECT_NAME='DEPARTMENTS';

फिर, एक अद्यतन निष्पादित करके सत्यापित करें कि क्या प्रक्रिया और नीति सही ढंग से काम करती है:

UPDATE DEPARTMENTS
SET ID_MANAGER=2
WHERE ID_DEPARTAMENT=1;

अंत में, प्रत्येक डेटाबेस के लिए ऑडिटिंग आवश्यक है और ऊपर प्रदान की गई विधियां आपको एक संदिग्ध गतिविधि खोजने में मदद करती हैं जो आपके डेटाबेस सुरक्षा को प्रभावित कर सकती है। Oracle डेटाबेस ऑडिटिंग के बारे में अधिक जानकारी के लिए, नीचे दी गई ग्रंथसूची देखें।

ग्रंथ सूची:

  • http://www.datadisk.co.uk/html_docs/oracle/auditing.htm
  • http://docs.oracle.com/cd/B10501_01/server.920/a96521/audit.htm
  • https://docs.oracle.com/cd/E11882_01/server.112/e10575/tdpsg_auditing.htm#TDPSG50000

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle डेटाबेस में CLOB डालें

  2. Oracle डेटाबेस में अनुमत कनेक्शन की अधिकतम संख्या की जाँच कैसे करें?

  3. cx_Oracle:मैं प्रत्येक पंक्ति को एक शब्दकोश के रूप में कैसे प्राप्त कर सकता हूं?

  4. फ्लशिंग सिंगल कर्सर

  5. Oracle:CSV फ़ाइल आयात करें