بتاريخ: 6 مارس 200521 سنة comment_28897 How to prevent users from connect through any tool except their application Note: The Database is Oracle 9i RAC on HP Tru64 Unix تقديم بلاغ
بتاريخ: 6 مارس 200521 سنة comment_28905 do not use database user or you should use label security for each user in the database to prevent user from changing data from any tools تقديم بلاغ
بتاريخ: 6 مارس 200521 سنة كاتب الموضوع comment_28919 Hi Thank you 1. I must be used database users because I have security application dealing with these users.2. But the second method I don't know what are you mean about label security تقديم بلاغ
بتاريخ: 6 مارس 200521 سنة كاتب الموضوع comment_28930 This document describes how to prevent end users from connect through any oracle tools except their applications. Do the following steps:1- Create or submit a job to the job queue, use the SUBMIT procedure in the DBMS_JOB package with PL/SQL code do the purpose of this document Called AUTH_SESSION procedure. VARIABLE jobno NUMBER BEGIN DBMS_JOB.SUBMIT (:jobno,'AUTH_SESSION;',SYSDATE,'SYSDATE+(1/(24*60*20))'); COMMIT; END; 2- Set the JOB_QUEUE_PROCESSES and JOB_QUEUE_INTERVAL in initial parameters file to enable the job on database.3- Create a USERS table on SYS user to save the exception users you need them to connect until expiry date (dealing with this table through interface). CREATE TABLE USERS (USERID NUMBER NOT NULL, USERNAME VARCHAR2(30) NOT NULL, EXPIRY_DATE DATE, EXPIRY_TIME VARCHAR2(10));3- Create the PL/SQL code AUTH_SESSION procedure on SYS user. CREATE OR REPLACE PROCEDURE AUTH_SESSION IS KILL_cur INTEGER; KILL_cur_feedback INTEGER; session_id NUMBER; serial_no NUMBER; CURSOR cur_GET_SESSIONS IS SELECT sid,serial#,module,action FROM V$SESSION WHERE (module is null or action is null) and username <>'SYS' and username <>'SYSTEM and username not in (select username from users where (EXPIRY_DATE >sysdate) or (to_date(EXPIRY_DATE,'dd-mon-yyyy') = to_date(sysdate,'dd-mon-yyyy') and EXPIRY_time >=to_char(sysdate,'hh24:mi:ss' ))); BEGIN FOR result_GET_SESSIONS IN cur_GET_SESSIONS LOOP session_id := result_GET_SESSIONS.SID; serial_no := result_GET_SESSIONS.SERIAL# ; KILL_cur := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE(KILL_cur, ' ALTER SYSTEM KILL SESSION ''' || session_id || ', ' || serial_no || '''' ,DBMS_SQL.NATIVE(; KILL_cur_feedback := DBMS_SQL.EXECUTE(KILL_cur); DBMS_SQL.CLOSE_CURSOR(KILL_cur); END LOOP; EXCEPTION WHEN OTHERS THEN DBMS_SQL.CLOSE_CURSOR(KILL_cur(; END;4- On application level create trigger WHEN_NEW_FORM_INSTANCE and set the module and action columns in V$SESSION by using SET_MODULE procedure in DBMS_APPLICATION_INFO package. DBMS_APPLICATION_INFO.SET_MODULE('SECURITY','APPLICATION'); Notes: 1- The first three step done on database level. 2- All packages used in this document exist on database level. 3- This way do not prevent the connection but kill session after 3 second from connect if module and action columns is null and username not on the exceptions. تقديم بلاغ
بتاريخ: 6 مارس 200521 سنة كاتب الموضوع comment_28932 but this method have problam with rac because I can kill session from client in rac system تقديم بلاغ
بتاريخ: 6 مارس 200521 سنة comment_28933 ال label security موضوع واسع انا لم ادخل به لغاية الان هو ببساطة اعطاء صلاحيات للمستخدمين على الجداول وبياناتها مثلاً نمنع مستخدم من التعديل على كل موظفين الدائرة 10 ولكن له الصلاحية على بقية الدوائر وهكذا. كل هذا في الداتابيز اي شغال مهما كانت الاداة التي دخل بها المستخدم بحيث تقوم بتحديد السياسات التي تريدها على الجداول ومن ثم تقوم بأنشائها في الداتابيزتذكرت الان انه يوجد جدول من جداول قواميس البيانات يخزن معلومات عن السشن الحالي احد هذه المعلومات هو اسم الاداة التي دخل بها المستخدم لا اذكر اسم الجدول الان اذا تذكرته سوف ارسله لك ولا تنسى بأنه يوجد داتابيز تريجر يكتب على المستخدم اسمه onlog on ماذا لو كتبته على ال sys وتعمل kill session لكل المستخدمين الذين دخلو من اداة غير الفورم انا لم اجرب ذلك هذا كل ما عندي والى الامام جميعا تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.