الانتقال إلى المحتوى

اليكم شرح : مشروع إدارة المحتوى - 1- إدارة التعقب


Faisal Matari

Recommended Posts

مواصلة للموضوع الأصلي تجدونه هنا 

http://www.araboug.org/ib/index.php?showtopic=60550

 

سوف أعمد بإذن الله تعالى الى شرح كل جزئية على حده في موضوع منفصل وذلك من اجل أن تعم الفائدة للجميع وليستطيع الباحث الوصول الى مبتغاه بسهولة ويسر وحتى أسهب في الشرح إكثر ....

 

 

1- إدارة التعقب

 

نبداء بسم الله الرحمن الرحيم بشرح الجزئية الخاصة بإدارة التعقب

 

1-  إدارة التعقب ، وهو جزء خاص بتعقب كل حركة يقوم بها المستخدم (اضافة ، حذف ، تعديل ، استعلام ، وصول) ، مع التاريخ ومن اي جهاز قام بها وكم رقم الأي بي واسم المستخدم ونظام التشغيل و.... الخ.

 

المقصود بإدارة التعقب : هي تعقب ومعرفة تفاصيل من يقوم بالدخول على البرنامج وما هي العمليات التي يقوم بها وتاريخها.

 

حيث نستفيد من هذه الفكرة اذا حدث أن هناك أحد القيود المحاسبية تم ادخاله بطريقة الخطأ وتسبب في خطأ فادح حيث يقوم مدير الحسابات بالتحقيق في الأمر وتهويل المشكلة على الرغم من ان هناك محاسبين لكل منها مهمة خاصة في مديول (الحسابات) ولكننا لم نعرف من قام بكتابة القيد ونكتشف المشكلة.

 

أحياناً يحصل أحدهم على كلمة السر الخاصة باسم المستخدم ويقوم بالدخول على النظام والعبث بما تقوم به أنت من مهام لأسباب مختلفة ولكننا هنا سوف نمنع ذلك كله.

 

وسنعرف من دخل باسمك وفي أي تاريخ ومن اي جهاز واجمع أكبر قدر من المعلومات  للوصول الى مواصفات المتصفح الحالي للنظام.

 

جرب الكود التالي

 


  SELECT SYS_CONTEXT ('USERENV', 'SESSIONID') sessionid,          SYS_CONTEXT ('USERENV', 'SID') sids,          SYS_CONTEXT ('USERENV', 'IP_ADDRESS') ip_address,          SYS_CONTEXT ('USERENV', 'OS_USER') os_user,          SYS_CONTEXT ('USERENV', 'HOST') hosts,          SYS_CONTEXT ('USERENV', 'SERVER_HOST') server_host,          SYS_CONTEXT ('USERENV', 'SESSION_USER') session_user,          SYS_CONTEXT ('USERENV', 'IDENTIFICATION_TYPE') identification_type,           SYS_CONTEXT ('USERENV', 'LANG') lang,
              SYS_CONTEXT ('USERENV', 'TERMINAL') termina
FROM DUAL;
بإمكانكم مراجعة الموضوع التالي لمعرفة كل المعلومات التي يقدمها SYS_CONTEXT من تفاصيل من هنا

https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions165.htm

 

ولكني أحببت أن أقدم أفضلها وذلك لأن اللائحة طويلة جداً

 

 

أولاً : قاعدة البيانات 

في البداية لابد من انشاء مستخدم لقاعدة البيانات باسم LIB وكلمة مرور LIB حتى تعمل بشكل جيد

من خلال بحثي وجدت أن هناك (رقم جلسة) لكل عملية (Log IN) على قاعدة البيانات يمكن الوصول اليها من الكود التالي

SELECT SYS_CONTEXT ('USERENV', 'SESSIONID') sessionid FROM DUAL;

سوف يعطيك الكود السابق كل مرة تدخل على قاعدة البيانات رقم جديد وهذا الرقم تسلسلي لا نهاية له ..

 

وبذلك تم إعتماد رقم الجلسة الحالية هو الرقم الأساسية (Primary Key)

 

 

نحن بحاجة فقط الى ثلاثة جداول وهي كما يلي :

1. INFORMATIONS وهو عبارة عن (View) فيه يتم الإتسعلام عن المعلومات الأساسية للجهاز

2. SESSIONS في هذ االجدول يتم تخزين كل عملية (دخول) وربطها باسم المستخدم.

3. TRACES في هذا الجدول يتم تخزين كل عملية يقوم بها المستخدم بدلالة (رقم الجلسة).

 

 

العملية كما يلي

الخطوة الأولة : INFORMATIONS  يعيد لي المعلومات الحالية

الخطوة الثانية : أقوم بتخزين المعلومات في جدول SESSIONS الذي فيه ؤقم الجلسة (SESSIONID) هو المفتاح الرئيسي ويتم في هذا الجدول ربط اسم المستخدم (CRNT_USER) من أجل معرفة من هو المستخدم الذي قام بهذه الجلسة كما يتم فيه تخزين تاريخ بداية الجلسة (STARTDATE) ومتى انتهت (ENDATE).

الخطوة الأخيرة: عند كل عملية وصول أو حذف او اضافة او تعديل او دخول للشاشة نقوم بوضع كود يتم من خلاله تخزين رقم الجلسة الحالية واسم الشاشة والعملية وتاريخها وتفاصيل العملية.

 

حيث يكون الربط بين الجدولين برقم الجسة فقط.

 

أنتهى

 

 

 

1. نقوم بإنشاء informations  فيو كما في الكود التالي


CREATE OR REPLACE FORCE VIEW lib.informations AS
   SELECT SYS_CONTEXT ('USERENV', 'SESSIONID') sessionid,
          SYS_CONTEXT ('USERENV', 'SID') sids,
          SYS_CONTEXT ('USERENV', 'OS_USER') os_user,
          SYS_CONTEXT ('USERENV', 'IP_ADDRESS') ip_address,
          SYS_CONTEXT ('USERENV', 'HOST') hosts,
          SYS_CONTEXT ('USERENV', 'SERVER_HOST') server_host,
          SYS_CONTEXT ('USERENV', 'SESSION_USER') session_user,
          SYS_CONTEXT ('USERENV', 'IDENTIFICATION_TYPE') identification_type,
          SYS_CONTEXT ('USERENV', 'LANG') lang,
          SYS_CONTEXT ('USERENV', 'TERMINAL') terminal
     FROM DUAL;

 

 

مهمتها ترجع لي جميع المعلومات المطلوبة والتي أريدها ...

 

2. نقوم بإنشاء جدول الجلسات SESSIONS كما يلي :


CREATE TABLE LIB.SESSIONS
(
  SESSIONID            VARCHAR2(256 BYTE)       NOT NULL,
  SIDS                 VARCHAR2(256 BYTE),
  OS_USER              VARCHAR2(256 BYTE),
  IP_ADDRESS           VARCHAR2(256 BYTE),
  HOSTS                VARCHAR2(256 BYTE),
  SERVER_HOST          VARCHAR2(256 BYTE),
  SESSION_USER         VARCHAR2(256 BYTE),
  IDENTIFICATION_TYPE  VARCHAR2(256 BYTE),
  LANG                 VARCHAR2(256 BYTE),
  TERMINAL             VARCHAR2(256 BYTE),
  CRNT_USER            VARCHAR2(256 BYTE),
  STARTDATE            DATE,
  ENDATE               DATE
)
 

3. نقوم بإنشاء جدول التعقب TRACES كما يلي :


CREATE TABLE LIB.TRACES
(
  SESSIONID   VARCHAR2(256 BYTE)                NOT NULL,
  FRM_NAME    VARCHAR2(150 BYTE)                NOT NULL,
  ACS_BLOCKS  VARCHAR2(50 BYTE),
  ACS_TYPE    VARCHAR2(50 BYTE),
  ACS_REF     VARCHAR2(50 BYTE),
  ACS_DESC    VARCHAR2(256 BYTE),
  ACS_DATE    DATE
)

 

ثانياً : الأكودا المستخدمة

1. بعد تسجيل الدخول والتحقق من ثحة اسم المستخدم وكلمة المرور نقوم بما يلي ..

 

الكود الخاص بتسجيل الجلسة وربطها بالمستخدم وبدايتها 


 insert into LIB.SESSIONS
        select SESSIONID,
            SIDS      ,
            OS_USER    ,
            IP_ADDRESS  ,
            HOSTS        ,
            SERVER_HOST   ,
            SESSION_USER   ,
            IDENTIFICATION_TYPE,
            LANG            ,
            TERMINAL         ,
            upper(Uname) ,--:global.uname 
            sysdate , null
          from LIB.INFORMATIONS;

 

ومهم جداً أن نقوم بمعرفة رقم الجلسة بالاستعلام عنه وجعله في  متغير :global.SESSIONID لسهولة الوصول اليه .

select SESSIONID  into         :global.SESSIONID from INFORMATIONS;

وأثناء تسجيل الخروج يجب كتابة الكود التالي في حدث PRE-LOGOUT لمعرفة الزمن الذي قضاه المستخدم في الجلسة وتاريخ الخروج

 

update LIB.SESSIONS  set ENDATE = sysdate  where SESSIONID  = :global.SESSIONID; 

2- أثناء كل عملية يتم تسجيل الدخول يتم تسجيل الحدث في جدل التعقب كما يلي :

insert into Traces values( :global.SESSIONID, :SYSTEM.CURRENT_FORM,:SYSTEM.Cursor_block,   'ACCESS', null, 'LOG IN',sysdate); 
   commit;

الكود السابق من خلاله تم تسجيل حدث (تسجيل الدخول) 

يمكن تكرار الكود السابق في الشاشات لمعرفة عملية الاضافة والتعديل والحذف او فتح الشاشة أو اي أمر تريده فقط بتغيير نوع الحدث كما يلي 

 

1. تسجيل حدث فتح الشاشة وفي تريجر WHEN-NEW-FORM-INSTANCE نكتب التالي

insert into Traces values(:SYSTEM.CURRENT_FORM,:SYSTEM.Cursor_block,:global.SESSIONID, 'ACCESS', null, 'OPEN FORM ',sysdate);

2. تسجيل حدث الاضافة INSERT على البلوك في تريجر PRE-INSERT كما يلي


insert into LIB.Traces
values(:global.SESSIONID, :SYSTEM.CURRENT_FORM,:SYSTEM.Cursor_block,
'INSERT', :FORMS.FRM_ID, 'INSERT NEW RECORD ' ,sysdate); 
 

3- تسجيل حدث التعديل UPDATE على البلوك في تريجر PRE-UPDATE كما يلي:


insert into LIB.Traces
values(:global.SESSIONID, :SYSTEM.CURRENT_FORM,:SYSTEM.Cursor_block,
'INSERT', :FORMS.FRM_ID, 'UPDATE RECORD ' ,sysdate); 

 

4. تسجيل حدث الاضافة DELETE على البلوك في تريجر PRE-DELETE كما يلي 


insert into LIB.Traces
values(:global.SESSIONID, :SYSTEM.CURRENT_FORM,:SYSTEM.Cursor_block,
'INSERT', :FORMS.FRM_ID, 'DELET RECORD ' ,sysdate); 
وبإمكانك تكرار هذا الكود مع تغيير التفاصيل في أي مكان تريد
مثلاً عند اجراء عملية بحث ، او حتى عند حصول رسالة خطأ أو أو أو .. وهكذا 
 
 

أتمنى من الجميع مشاركتي بالنتائج التي وصلتم اليها وأبرز المعوقات

 

وكما أقول دائماً إن شاء الله أكون على استعداد تام لأي استفسار

 

post-139007-0-84817700-1457508484_thumb.jpg

تم تعديل بواسطة Faisal Matari
رابط هذا التعليق
شارك

 

أتمنى من الجميع مشاركتي النتائج التي وصلو اليها وأبرز المعوقات

من اجل الإستمرار في الأجزاء التالية 

 

رابط هذا التعليق
شارك

ماشا الله مهندس..

فكرة وعمل جبار جدا وراح يكون مفيد لأغلب المبرمجين ..

 

امل منكم الإستمرار وإفادتنا ..

 

ليس عندي ما اظيفه على طرحك..

 

كل الشكر و التفدير.. لك..

رابط هذا التعليق
شارك

  • بعد 2 أسابيع...

لعدم فائدة الموضوع ، لم استمر في الشرح ،

فلتعذروني ،،، وسأعادوه في القريب العاجل

رابط هذا التعليق
شارك

  • بعد 1 شهر...
  • بعد 2 شهور...
  • بعد 2 أسابيع...

وصلتني بعض الرسائل من الأصدقاء بخصوص تكملة الموضوع ،

ونعدكم إن شاء الله في القريب العاجل 

دمتم سالمين

رابط هذا التعليق
شارك

  • بعد 6 شهور...
  • بعد 8 شهور...

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية