اذهب الي المحتوي

لوحة القادة


المحتوى صاحب التقييم الأعلى

Showing content with the highest reputation since 12 ينا, 2021 في جميع الأقسام

  1. 1 point
    ماهو مفهوم VPD وماهي الحاجه منــــــــــــــها : عندما نتكلم عن قواعد البيانات فإن من أهم الأمور التي يجب الإهتمام بها والتركيز عليها موضوع الأمن ونجد بعض الأسئلة التي تطرح نفسها هل بإستطاعة شخص ما إختراق قاعدة البيانات بإستخدام أي طريقة ؟ هل بياناتي في وضع آمن ؟وهل تستخدم بياناتي من تطبيقات أخرى بدون معرفتي ؟ كيف يمكنني زيادة أمن البيانات ؟ وغيرها الكثير من الأسئلة وإحدى الأمور التي تجيب على هذه الأسئلة هي مايسمى بال Virtual Private Database وسنتكلم عن طريقة إعداد هذه التقنية بشرح مختصر ويمكن الرجوع إلى المقالة الرئيسية للكاتب Sameer Wadhwa في موقعه http://www.samoratech.com بدئت هذه التقنية من إصدار أوراكل 8i وأصبحت شائعة الإستخدام ومفيدة في الإصدار ORACLE 9i ومفهوم هذه التقنية هو تطبيق قواعد الأمن عن طريق قاعدة البيانات وليس عن طريق البرنامج أو التطبيق بحيث لانحتاج إلى تطبيق قواعد الأمن على كل تطبيق يستخدم قاعدة البيانات وهذه التقنية تصبح فعالة أكثر إذا كانت البيانات تستخدم من تطبيقات خارج الشركة وفي بيئة غير آمنة مثلا مواقع التجارة الإلكترونية حيث تسمح للعملاء من الدخول على بيانات معينة وتستخدم هذه التقنية في البنوك ، المستشفيات ، المؤسسات المالية لزيادة وتعزيز أمن البيانات. ماهي آلية عمل الــــ Virtual Private Database أو row-level security"بشكل مختصر " عند دخول المستخدم على قاعدة البيانات يبدء عمل database logon trigger والذي يقوم بعمل CALL للــ CONTEXT stored procedure لتحديد ماهو المسموح والغير مسموح تنفيذه من قبل هذا المستخدم عن طريق defined context وبمجرد محاولة المستخدم تنفيذ إستعلام أو تنفيذ جملة DML فإنه يتم تنفيذ السياسات والشروط المعرفة داخل ال CONTEXT . والآن لنبدء بشرح مثال على هذا الموضوع : هذا المثال سوف يستخدم جدول الموظفين EMP الموجود لدى المستخدم SCOTT ، وسنطبق VPD بحيث يستطيع المستخدم مشاهدة البيانات التي تخصه فقط وليس جميع البيانات الموجودة في جدول الموظفين، أيضا سوف نقوم بإنشاء مستخدمين هما JAMES , BLAKE وكل منهما لديه صلاحية SELECT على جدول EMP وسنلاحظ أن أي من المستخدمين سوف يقوم بتنفيذ جملة مثل SELECT * FROM EMP; سوف يتم ترجمتها مباشرة إلى : SELECT "EMPNO","ENAME","JOB","MGR","HIREDATE" ,"SAL","COMM","DEPTNO" FROM "SCOTT"."EMP" "EMP" WHERE (EMPNO=SYS_CONTEXT('SCOTTCTX','EMP_ID')) ولو لاحظنا سنجد أن الجملة الأخيرة (EMPNO=SYS_CONTEXT('SCOTTCTX','EMP_ID')) مضافة من الأوراكل حسب سياسة الأمن التي تم تعريفهـــــــــــا سابقا . خطوات إعداد وتنفيذ الــــ Virtual Private Database أو row-level security : 1-إنشاء المستخدمين JAMES & BLAKE ومنحهم الصلاحيات على جدول الموظفين عن طريق الدخول على حساب ال SYS وتنفيذ مايلي : CREATE USER JAMES IDENTIFIED BY JAMES123; CREATE USER BLAKE IDENTIFIED BY BLAKE123; GRANT CREATE SESSION TO JAMES, BLAKE; CREATE TABLE SCOTT.EMPIDCONTROLTAB AS SELECT EMPNO, ENAME FROM SCOTT.EMP; GRANT SELECT ON SCOTT.EMP TO JAMES, BLAKE; 2-منح المستخدم SCOTT لصلاحية CONTEXT PRIVILEGE ليتمكن من عمل CONTEXT " تعريف شروط وسياسات الدخول على جدول الموظفين" GRANT CREATE ANY CONTEXT TO SCOTT; 3- إنشاء ال CONTEXT PACKAGE ومنح الصلاحيات عليها ندخل على المستخدم SCOTT ونقوم بإنشاء CONTEXT PACKAGE عن طريق تنفيذ مايلي : CREATE OR REPLACE CONTEXT SCOTTCTX USING SCOTT.CTXPKG; CREATE OR REPLACE PACKAGE SCOTT.CTXPKG AS PROCEDURE CTXPROC; والآن نقوم بإنشاء ال PACKAGE BODY والذي سنحدد فيه شروط وسياسات الدخول على البيانات كما يلي : CREATE OR REPLACE PACKAGE BODY SCOTT.CTXPKG IS PROCEDURE CTXPROC IS VEMPNO NUMBER; BEGIN -- set the attribute OWNER=TRUE if user is SCOTT IF SYS_CONTEXT ('USERENV', 'SESSION_USER') = 'SCOTT' THEN DBMS_SESSION.SET_CONTEXT ('SCOTTCTX', 'OWNER', 'TRUE'); ELSE BEGIN SELECT EMPNO INTO VEMPNO FROM SCOTT.EMPIDCONTROLTAB WHERE ENAME = SYS_CONTEXT ('USERENV', 'SESSION_USER'); -- set the attribute EMP_ID with the EMPNO of the -- session user DBMS_SESSION.SET_CONTEXT ('SCOTTCTX', 'EMP_ID', VEMPNO); EXCEPTION WHEN NO_DATA_FOUND THEN /* NO EMPLOYEE ID FOUND, SET A DUMMY ID */ DBMS_SESSION.SET_CONTEXT ('SCOTTCTX', 'EMP_ID', 0); END; END IF; END CTXPROC; END CTXPKG; نلاحظ أنه عندما يكون المستخدم هو SCOTT فإن نعطيه الصلاحيات الكاملة بسبب أنه TABLE OWNER وعندما يكون مستخدم آخر نقوم بالبحث عن رقمه وهو رقم الوظف في حالتنا هذه من جدول EMPIDCONTROLTAB ، إذا تم العثور على رقم الموظف فإننا نسمح له بالدخول على البيانات التي تخصه فقط في جدول الموظفين " السجلات التي تخصه فقط " ، وإذا لم يتم العثور على رقم لهذا الموظف فإننا نحدد رقم صفر له بحيث لايمكنه مشاهدة أي بيانات من جدول الموظفين . الآن نقوم بمنح صلاحية تنفيذ الحزمة السابقة الى جميع المستخدمين : GRANT EXECUTE ON SCOTT.CTXPKG TO PUBLIC; 4- نقوم الآن بإنشاء database logon trigger بحيث يتم تنفيذ ال context package بعد الدخول لقاعدة البيانات : CREATE OR REPLACE TRIGGER SCOTT.VPD_TRG AFTER LOGON ON DATABASE BEGIN SCOTT.CTXPKG.CTXPROC; END; 5- لندخل الآن بالمستخدم james/james123 وننفذ مايلي : col attribute format a10 col value format a10 col attribute format a10 SELECT * FROM SESSION_CONTEXT; ستظهر لنا معلومات عن الـــ CONTEXT المطبق على هذا ال SESSION . 6- نقوم بإنشاء سياسات الأمن التي نريد تطبيقها على جدول الموظفين وال FUNCTION التي تقوم بذلك بالدخول على المستخدم SCOTT ومنح الصلاحية عليها الى جميع المستخدمين وتنفيذ مايلي : CREATE OR REPLACE PACKAGE PREDICATE_PCK AS FUNCTION EMP_SELECT (OWNER VARCHAR2, OBJNAME VARCHAR2) RETURN VARCHAR2; END PREDICATE_PCK; / CREATE OR REPLACE PACKAGE BODY PREDICATE_PCK IS FUNCTION EMP_SELECT (OWNER VARCHAR2, OBJNAME VARCHAR2) RETURN VARCHAR2 IS PREDICATE VARCHAR2 (2000); BEGIN IF (SYS_CONTEXT ('SCOTTCTX', 'EMP_ID') = 0) THEN PREDICATE := '1=2'; ELSE PREDICATE := 'EMPNO=SYS_CONTEXT(''SCOTTCTX'',''EMP_ID'')'; END IF; IF (SYS_CONTEXT ('SCOTTCTX', 'OWNER') = 'TRUE') THEN PREDICATE := NULL; END IF; RETURN PREDICATE; END EMP_SELECT; END PREDICATE_PCK; / grant execute on SCOTT.PREDICATE_PCK to public; / لاحظ مما سبق أن هناك ثلاثة قواعد قمنا بتحديدها -- عندما يكون ال EMP_ID=0 فهذا معناه أن المستخدم لايمكنه مشاهدة أي بيانات . -- عندما يوجد رقم للمستخدم في جدول EMPIDCONTROLTAB فهذا معناه أنه يمكن للمستخدم مشاهدة البيانات التي تخصه فقط . -- إذا كان المستخدم هو الذي قام بإنشاء الجدول وهو SCOTT في هذا المثال يمكنه مشاهدة مايريد من المعلومات . بمجرد الإنتهاء من ماسبق نقوم بإضافة ال POLICY إلى الجدول عن طريق DBMS_RLS.ADD_POLICY PROCEDURE وذلك عن طريق الدخول على المستخدم SYS وتنفيذ مايلي : BEGIN DBMS_RLS.ADD_POLICY (OBJECT_SCHEMA => 'SCOTT', OBJECT_NAME => 'EMP', POLICY_NAME => 'EMP_SELECT_POLICY', FUNCTION_SCHEMA => 'SCOTT', POLICY_FUNCTION => 'PREDICATE_PCK.EMP_SELECT', STATEMENT_TYPES => 'SELECT', ENABLE => TRUE ); END; أيضا إذا أردنا إضافة شروط على ال INSERT , UPDATE, DELETE يمكننا ذلك عن طريق تنفيذ مايلي : BEGIN DBMS_RLS.ADD_POLICY (OBJECT_SCHEMA => 'SCOTT', OBJECT_NAME => 'EMP', POLICY_NAME => 'EMP_UPDATE_POLICY', FUNCTION_SCHEMA => 'SCOTT', POLICY_FUNCTION => 'PREDICATE_PCK.EMP_UPDATE', STATEMENT_TYPES => 'UPDATE,INSERT', UPDATE_CHECK => 'TRUE', ENABLE => TRUE ); END; -الآن جاء وقت الـتأكد من نتائج الخطوات السابقة وهل تم إعداد VPD بشكل ممتاز ندخل على المستخدم SCOTT ونمنح صلاحية SELECT على جدول الموظفين للمستخدم HR : GRANT SELECT ON EMP TO HR; ندخل على المستخدم HR وننفذ SELECT * FROM SCOTT.EMP; لن تعرض أي بيانات بالطبع لإن المستخدم HR غير موجود في جدول EMPIDCONTROLTAB لنحاول الدخول على المستخدم james/james123 وننفذ SELECT * FROM SCOTT.EMP; ستكون النتيجة سجل واحد يخص المستخدم james : EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7900 JAMES CLERK 7698 03-DEC-81 950 30 لنحاول الدخول على المستخدم blake والمستخدم scott ونرى ماهي النتيجة ولماذا ؟ خلاصة الموضوع أن تقنية الــــ Virtual Private Database أو row-level security تمكننا من إعداد سياسات الأمن على مستوى السجل وهي أسهل من تنفيذ هذه السياسات عن طريق التطبيقات والبرامج .... والله الموضوع طويل وسامحونا على أي تقصير تحياتي ولاتنسونا من دعوه صالحة .... منقول من موقع http://www.samoratech.com
  2. 1 point
    يسر الله امركم ووفقكم الى ما يحبه ويرضاه موضوع ال vagrant ده معقد شوية ، هل هناك ملف يشرح الخطوات للوصول الى الهدف الذي وجهتني اليه اخي الكريم؟ معذرة انا اثقلت عليك
  3. 1 point
    وعليكم السلام ورحمة الله للابتعاد عن مشاكل التنصيب وعثراته التي تضيع وقت وجهد المطور او المهيكل للنظام في حل مشاكل لا تخصه وتعوقه عن الانطلاق والابداع لذلك في رأيي المتواضع، أنه من الافضل بلاشك الابتعاد عن التنزيل المباشر على Host OS والافضلية لصالح الاتجاه الى الVirtualization و Containerization والافضل منهما Cloud وأحيلك سلمك الله على عدة اتجاهات او خيارات للعمل والانطلاق. وفقك الله للانسب فيهما (1) استخدام Vagrant لانشاء VM فهو امر جيد كعملية installation automation احترافية https://blogs.oracle.com/scoter/automated-oracle-apex-191-installation-with-vagrant-and-virtualbox (2) استخدام Docker Container لتنزيل Solution Stack الخاصة بOracle APEX Dani3lSun/docker-db-apex-dev GITHUB.COM Oracle Database & APEX Developer Docker Image. Contribute to... (3) الاستفادة من Oracle APEX Service الموجودة على Oracle Cloud Infrastructure هذا ما ارجحه لك ان اردت رأيي ودمتم بخير وعافية محمود ربيع أسعد بمتابعتكم: حسابي على LinkedIn حسابي على Twitter حسابي على Instagram
  4. 1 point
    الف شكر اخي محمد رمضان فعلا تم تطبيق نفس الطريقة التي تفضلتم بها من خلال عمل تسلسل لكل فئة مثل نوع العقارات تبدء بالرقم 1 وأنواع العقارات تم حجز لها خانتين بحيث تبدء 10 وتنتهي بـ 19 ، ونوع الشقق تبدء بالرقم 20 وتنتهي بــ 29 هكذا لباقي الفئات والانواع . CATEGORY NAME NO TYPE_ID TYPE_NAME CUSTUMERS 1 10 OWNER 11 CONTRACTORS 12 SUPPLIER 13 14 15 16 17 18 19 UNITS 2 20 21 22 23 24 25 26 27 28 29
  5. 1 point
    اخي الفاضل/ هذه الرسالة لا تعني ان هناك نقص في ملفاتك، ولكنها تعني أنك لم تضع مجلد images داخل المكان المفروض ان يرى فيه ال resources الخاصة بك ، وهنا اقترح عليك تشغيل ORDS on Tomcat apache وإليك رابط كل خطوات تسطيب ابيكس على جهازك والملفات التي أشرت إليها ليست ناقصة ولكنها ملغاة من اصدار 20.2
  6. 1 point
    ان شاء الله سوف اقوم بشرح دروس فى weblogic server 10.3 وارجو منكم الدعوات الصالحات
  7. 1 point
    وعليكم السلام ورحمة الله وبركاته حل آخر قد يكون أسهل في القراءة باستخدام WITH With YEAR_DAYS AS ( select to_char( to_date('2019-01-01','YYYY-MM-DD') + rownum -1 , 'YYYY-MM-DD') as DATESTR, TO_CHAR( to_date('2019-01-01','YYYY-MM-DD') + rownum -1, 'DAY') as DAYSTR from all_objects where rownum <= to_date('2019-12-31','YYYY-MM-DD')-to_date('2019-01-01','YYYY-MM-DD')+1 ) select DATESTR,DAYSTR from YEAR_DAYS where TRIM(DAYSTR) in ('TUESDAY','SATURDAY') ودمت بخير وعافية
  8. 1 point
    select replace(day_name,' ',''),day_date from (SELECT TO_CHAR(TRUNC(SYSDATE,'year')+Level-1,'DAY') day_name,trunc(SYSDATE,'year') +Level-1 day_date FROM DUAL connect by Level<=(ADD_MONTHS(TRUNC (SYSDATE ,'YEAR'),12)-trunc(SYSDATE,'year'))) where replace(day_name,' ','') in ('SATURDAY','TUESDAY') order by 2;
  9. 1 point
    لعلك ذكرت هذا من البداية ! عموما لا مشكلة .. الحل الثاني: (١) قم بتعريف FTP Server على Server الشركة الداخلي الآمن وبالنسبة لنظام التشغيل (Oracle Linux هو اختياري المفضل) (٢) من خلال APEX قم بمناداة PL/SQL يتعامل مع الFTP Server https://oracle-base.com/articles/misc/ftp-from-plsql دمت بخير وعافية
  10. 1 point
    السلام عليكم ورحمة الله كحل مقترح، يمكنك تحميل الملفات على Google Drive يمكنك ذلك من الAPEX عن طريق استخدام ال Google Drive REST API و من خلال OAuth2 https://developers.google.com/drive/api/v3/about-sdk ثم من خلال الAPEX، قم بانشاء ال RESTful Modules و فيها ال Handlers المختلفة (PUT handler على سبيل المثال) المطلوبة في ال Guide أعلاه وخلال عملية الDevelopment يمكنك الاستفادة من ال Google OAuth2 Playground https://developers.google.com/oauthplayground/ ودمتم بخير وعافية
×
×
  • اضف...

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

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