msh بتاريخ: 2 يونيو 2005 تقديم بلاغ مشاركة بتاريخ: 2 يونيو 2005 ماهو مفهوم 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 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ابو صالح بتاريخ: 2 يونيو 2005 تقديم بلاغ مشاركة بتاريخ: 2 يونيو 2005 يعطيك الف عافيه يا محمد ،،، شرح جميل ،،، وياريت تثبتة لان كثير من الاخوان بيسألو عن طريقة استخدامها .تحياتي،، اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
searcher بتاريخ: 7 يونيو 2005 تقديم بلاغ مشاركة بتاريخ: 7 يونيو 2005 بسم الله الرحمن الرحيم جزاك الله كل خيرو تسلم عيونك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Naji_Ali بتاريخ: 8 يونيو 2005 تقديم بلاغ مشاركة بتاريخ: 8 يونيو 2005 السلام عليكمالله يجزيك الخير على هذه المشاركة القيمة التي تثري هذا المنتدى القيمأخوك أبو عمر اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
orayyan بتاريخ: 8 يونيو 2005 تقديم بلاغ مشاركة بتاريخ: 8 يونيو 2005 جزاك الله خيرا على هذا الموضوع الجديد اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
wdbellia بتاريخ: 8 يونيو 2005 تقديم بلاغ مشاركة بتاريخ: 8 يونيو 2005 جزاك الله خيراادام الله لك العافية و اجزل لك كل الشكر اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
msh بتاريخ: 8 يونيو 2005 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 8 يونيو 2005 السلام عليكم ورحمة الله وبركاته،، أخواني مشكورين على مروركم و جزاكم الله خيرا ، أخي أبو صالح سيتم تثبيت الموضوع ولك خالص تحياتي .... اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
maher_atieh بتاريخ: 9 يونيو 2005 تقديم بلاغ مشاركة بتاريخ: 9 يونيو 2005 والله تستاهل الشكر والتقديرعلى هذا الموضوع الجميل اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Amrooracle بتاريخ: 16 يونيو 2005 تقديم بلاغ مشاركة بتاريخ: 16 يونيو 2005 السلام عليكم ورحمة الله وبركاته،، جزاك الله خير الجزاء اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
عبدالله أسعد بتاريخ: 16 يونيو 2005 تقديم بلاغ مشاركة بتاريخ: 16 يونيو 2005 تسلم اخى فى الله المهندس محمد على الموضوع الجيد جزاك الله عنا كل خير و ادعو الله ان يكون فى ميزان حسناتك جزاك الله كل خير اخى فى الله اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Walid Azmy بتاريخ: 17 يونيو 2005 تقديم بلاغ مشاركة بتاريخ: 17 يونيو 2005 (معدل) أخى الفاضل المهندس محمد جزاك الله كل الخير لقد حاولت سابقا التعرض لموضوع الأمن على مستوى السجلولم يكن الشرح بهذه البساطة والتنسيق والدقة فى توصيل المعلومهكنا درسنا فى مايكروزفت الvpn طريقة تنفيذ VPNلكن الموضوع لم يكن أكثر من تأمين connection mechanism على البيانات المنقوله عبر الsession أما التطبيق على database مثل أوراكل فكان الموضوع طويل ومحير شوية.أشكرك على هذا الجهد الرائع .. جعله الله فى ميزان حسناتك تم تعديل 17 يونيو 2005 بواسطة Walid Azmy اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
hor moheb بتاريخ: 19 يونيو 2005 تقديم بلاغ مشاركة بتاريخ: 19 يونيو 2005 جزاك الله خيرا علي هذا الشرح الوافي والمبسط والي المام دائما اخي محمد اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
albader_2005 بتاريخ: 4 أغسطس 2005 تقديم بلاغ مشاركة بتاريخ: 4 أغسطس 2005 جزاك الله خيرا علي هذا الشرح الوافي والمبسط والي المام دائما اخي محمد اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
hor moheb بتاريخ: 23 أغسطس 2005 تقديم بلاغ مشاركة بتاريخ: 23 أغسطس 2005 موضوع جميل وشرح رائع اخي محمد جزاك الله خيرا ونفعنا بعلمك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
محمد العماني بتاريخ: 15 سبتمبر 2005 تقديم بلاغ مشاركة بتاريخ: 15 سبتمبر 2005 (معدل) بارك الله فيك اخي على هذا الشرح الوافي عن إعداد وتنفيذ الــــ Virtual Private Database, الأمن على مستوى السجل و جعل الله هذا العمل لك في ميزان حسناتك وندعو من الله تعالى ان ينعنا بعلمك في هذا المنتدى المتميز دائما بوجود المشرفين و مناقشة الاعضاء الكرام تم تعديل 15 سبتمبر 2005 بواسطة omanip21 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
alabqari بتاريخ: 30 سبتمبر 2005 تقديم بلاغ مشاركة بتاريخ: 30 سبتمبر 2005 اخي الكريم شكراً على الشرح الرائع و المبسط و ارجوا ان تزيدونا من علمكم و خبراتكم و جزاك الله الخير اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
kash بتاريخ: 10 أكتوبر 2005 تقديم بلاغ مشاركة بتاريخ: 10 أكتوبر 2005 فعلا معلومة جميلة من شخص متميز دائما... اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
abedpftc بتاريخ: 18 أكتوبر 2005 تقديم بلاغ مشاركة بتاريخ: 18 أكتوبر 2005 اخي الكريمالله يجزيك الخير اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
moh8582 بتاريخ: 16 فبراير 2006 تقديم بلاغ مشاركة بتاريخ: 16 فبراير 2006 جعل الله هذا العمل لك في ميزان حسناتك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
azharo بتاريخ: 17 فبراير 2006 تقديم بلاغ مشاركة بتاريخ: 17 فبراير 2006 بارك الله فيك اخي شرح رائع جدا الف شكر اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
simba2000 بتاريخ: 3 مارس 2006 تقديم بلاغ مشاركة بتاريخ: 3 مارس 2006 thanks a lot اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
محمد ابراهيم حمودة بتاريخ: 3 سبتمبر 2006 تقديم بلاغ مشاركة بتاريخ: 3 سبتمبر 2006 بارك الله فيك اخي MSH افدتني كتيرررررررربس ما تطرقت للصعوبات التي تواجه تطبيق الــــ Virtual Private Database من خلال الــAPPLICATION SERVER 10g ياريت تزيدنا في هذا الموضوع مع طريقة الحلول لتلافي هذه المشكلة ....تحياتي لشخصك الكريم ... اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
رامي تيلخ بتاريخ: 11 نوفمبر 2006 تقديم بلاغ مشاركة بتاريخ: 11 نوفمبر 2006 سؤال عاجل؟؟؟قمت بتطبيق VPD و كل شي تمام, و لكن واجهتني مشكلة في عملية BACKUPIPM and EXPارجو إفادتي في ذلك و لكم جزيل الشكر اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ahmed_shokry_ocp بتاريخ: 19 أغسطس 2009 تقديم بلاغ مشاركة بتاريخ: 19 أغسطس 2009 بارك الله فيك ونور الله بصيرتك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
hamdan102 بتاريخ: 31 ديسمبر 2009 تقديم بلاغ مشاركة بتاريخ: 31 ديسمبر 2009 (معدل) شكرا" جزيلا" اخي الكريموالله يعطيك العافيه تم تعديل 31 ديسمبر 2009 بواسطة hamdan102 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.