الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

احمي برنامجك ( كود خاص للحماية )

مغلق
بدأه ماجــــــــــد في 27 سبتمبر 2001 · 8 رد · 1,514 مشاهدة · في قواعد بيانات Oracle
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام .. الصراحة هذي أول مرة أتتشرف بالدخول إلى المنتدى و لا اعرف مستوى الأخوه الأعضاء والمشاركين , عموما أنا بفضل الله أجيد ORACLE DATABASE AND DEVELOPER2000 وبإمكانياتي المتواضعة أود تقبل مشاركاتي و أتمنى أن تكون مفيدة للأخوة ..

سأتطرق لعدة مواضيع وأفكار برمجية و أكود ولكن أود أن تكون بطريقة منظمة لذلك اعتقد بل اجزم أن أي نظام معلوماتي يجب أن يدعمه نظام أمني متكامل و ذلك للمحافظة على سرية البيانات و التحكم بمستخدمي النظام , فمن الضروري قبل الشروع في عمل أي مشروع يجب أن يحتوي على نظام أمنى وحيث أن أو راكل كقاعدة بيانات تعتبر متمكنة من هذه الناحية إلا إن القصور يأتي عندما تريد بناء برنامج باستخدام أحد منتجات أو راكل و نركز هنا على ال DEVELOPER2000 ولتخطي هذا القصور يجب أن تقوم ببناء نظامك الأمني الخاص بك , فيمكنك هذا النظام بأن تقوم بإنشاء مستخدمين وإعطاءهم بعض الصلاحيات و تسجيل دخولهم و خروجهم من النظام وما العمليات التي قاموا بها وعدة ميزات أخرى ، وسوف أقوم بتقسيم العمل إلى أجزاء ليتسنى للأخوة بفهم أولا ..أولا.. أولا و من ثم التطبيق لأن الأهم هو فهم الفكرة لاعطاء الفكر مساحة للا بتكار و التطوير ..

في هذا الجزء سنقوم بإنشاء جدول في قاعدة البيانات و إنشاء FORM يقوم بالتأكد من المستخدم وكلمة مروره وصلاحياته و حالته , فالرجاء اتباع الآتي :

1)

) CREATE TABLE USER

USER_ID VARCHAR2(10) NOT NULL,

USER_PAS VARCHAR2(10) NOT NULL,

USER_N VARCHAR2(35) NOT NULL,

USER_G VARCHAR2(15) NOT NULL,

USER_S VARCHAR2(8) NOT NULL,

USER_D DATE);

2)

INSERT INTO USERS VALUES(‘ADMINISTRATOR’,’ADMNPASS’,’THE ADMINISTRATOR FOR SYSTEM’,’ADMINS’,’ACTIVE’,SYSDTAE);

حيث أن :-

USER_ID= رقم المستخدم

USER_PAS=كلمة المرور( الرقم السري )

USER_N= اسم المستخدم

USER_G=مجموعة المستخدم التي تبين صلاحياته(مشرف,مستخدم,إداري)

USER_S=حالة المستخدم( نشط أو مقفل)

USER_D=تاريخ إنشاء المستخدم

ويمكن إضافة العديد من الحقول التي يمكن الاستفادة منها ولكن نكتفي بهذا القدر لفهم الفكرة

3) الذهاب إلى DVELOPER و تشغيل FORM BUILDER و إنشاء NEW MODULE

4) إنشاء 3 TEXT ITEM ليس مربوطين بقاعدة البيانات DATABASE = No

5) إنشاء 2 BUTTON

6) كتابة هذا الكود في BUTTON 1

DECLARE

V_USER_ID NUMBER;

V_USER_PAS VARCHAR2(10);

V_ALRT NUMBER;

V_USER_G VARCHAR2(15);

V_USER_S VARCHAR(8);

BEGIN

IF :TEXT_USER_ID IS NULL THEN

V_ALRT:=SHOW_ALERT('ALRT_F_USER');

GO_ITEM('TEXT_USER_ID');

RETURN;

END IF;

IF :TEXT_PASSWORD IS NULL THEN

V_ALRT:=SHOW_ALERT('ALRT_F_PASSWORD');

GO_ITEM('TEXT_PASSWORD');

RETURN;

END IF;

SELECT COUNT(*) INTO V_USER_ID FROM USERS WHERE USER_ID=:TEXT_USER_ID;

IF V_USER_ID!=0 THEN

SELECT USER_PAS INTO V_USER_PAS FROM USERS WHERE USER_ID=:TEXT_USER_ID;

IF V_USER_PAS=:TEXT_PASSWORD THEN

SELECT USER_G,USER_S INTO V_USER_G,V_USER_S FROM USERS WHERE USER_ID=:TEXT_USER_ID;

:GLOBAL.USER_G :=V_USER_G;

:GLOBAL.USER_ID:=:TEXT_USER_ID;

IF V_USER_S='ACTIVE' THEN

INSERT INTO LOG (LOG_NO,USER_ID,LOG_S,LOG_D) VALUES(S_LOG.NEXTVAL,:TEXT_USER_ID,'LOGON',SYSDATE);

COMMIT;

NEW_FORM('C:FORMSFRM_MAIN.FMX');

ELSE

V_ALRT:=SHOW_ALERT('ALRT_DISABLED');

EXIT_FORM(NO_VALIDATE);

END IF;

ELSE

V_ALRT:=SHOW_ALERT('ALRT_PASSWORD');

:DISP_COUNTER:=:DISP_COUNTER+1;

GO_ITEM('TEXT_PASSWORD');

END IF;

ELSE

V_ALRT:=SHOW_ALERT('ALRT_USER');

GO_ITEM('TEXT_USER_ID');

END IF;

IF :DISP_COUNTER > 3 THEN

UPDATE USERS SET USER_S='DISABLED' WHERE RTRIM(USER_ID)=RTRIM(:TEXT_USER_ID);

COMMIT;

V_ALRT:=SHOW_ALERT('ALRT_DISABLED');

EXIT_FORM(NO_VALIDATE);

END IF;

exception

when others then

message(sqlerrm);

END;

ارجو ابلاغي ما اذا كان ما قدمتة مفيد, لاستكمال البقية؟؟؟!!!

لا تترد بطلب الايضاح ..

#2

اخي ماجد

السلام عليكم ورحمة الله وبركاته

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

وياخي ماجد بارك الله فيك وفي مقترحك ونرحب بأى مقترح تكون فيه استفدتنا ونامل منك مساعدة اخواننا في( دروس في النماذج)

وبارك الله فيك

#3

السلام عليكم

الاخ ماجد

ياهلا ومرحبا بك بين اخوانك

#4

بسم الله الرحمن الرحيم

أولاً أهلا بك يا أخ ماجد في هذا المنتدى

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

فهل من طريقة لتخزين كلمة المرور بحيث تكون رموزا غير مفهومة عند استعراض الجدول

#5

السلام … الأخ omar_s حقيقتا لا توجد طريقة مباشرة لتحويل بيانات أي حقل الى بيانات مشفرة و لا تمثل أي مشكلة لاوراكل و ذلك لأسباب التالية :

1) إذا كنت تخطط لاستخدام برنامج يوجد على أكثر من جهاز (client) فأنك بلا شك لا يجب وضع أي برنامج يتيح المستخدم للدخول إلى قاعدة البيانات مثل SQL * PLUS فالمستخدم ينم استقبال و إرسال البيانات عن طريق الشاشات التي بنيتها باستخدام ال DEVELOPER2000 أو أي لغة برمجة أخرى .

2) إذا كنت تتعامل مباشرة مع قاعدة البيانات من دون أي برنامج وسيط ، فأنه في هذه الحالة لدى أوراكل عدة طرق و عدة مبررات لعدم استخدامها للبيانات المشفرة ومن أهمها :

أن أي قاعدة بيانات تنشئ فان من حق المنشئ التحكم الكامل بهذه القاعدة ومن هذا المنطلق حتى وان شفرت أي حقل فانه يستطيع القيام بتحديث هذا الحقل واستخدام كلمة السر التي يريدها و بالتالي فعليا لم تستطع منع حدوث أي انتهاك على سرية البيانات ، و في هذه الحالة يعتقدون أن الحل الأمثل إذا كنت ترغب في منع رؤية بعض البيانات ، إما القيام بإنشاء مستخدم جديد وان تقوم بإعطائه بعض الصلاحيات privileges و تمنعه من ال select ومن ال update ولكن في هذه الحالة بالطبع لن تستطيع رؤية أي جدول لأنك منعت عنه خاصية select ، إذن الأنسب أن تقوم بإنشاء view بشرط أن لا يتضمن الحقول السرية التي لا يراد رؤيتها ومن ثم إعطاء خاصية select لهذا المستخدم دون الخوف من رؤية أو تعديل البيانات .

#6

السلام عليكم ورحمة الله وبركاته

الاخ ماجد

اهلا وسهلا بك في هذا المنتدي الرائع

وإن شاء الله تكون من احد أعمدته وخصوصا انك

تجيد Oracle Database And Developer 2000

وبالنسبه للموضوع الذي طرحته فهو موضوع مهم جدا

ولكن هنا سؤال اريد أن أوجه لك أولا :

لماذا لايكون الاتصال بقاعدة البيانات مباشرة من قبل كل مستخدم ؟

ومن سيكون المتصل الفعلي في حال تنفيذ النموذج الذي شرحت طريقته ؟

طبعا قمت بقراءة الاكواد التي كتبتها ولاحظت أن الاتصال يكون عن طريق

مستخدم واحد فقط ولكن هناك شاشة يجب أن يتخطاها المستخدمون الاخرون

وذلك عن طريق وضع " إسمه أو رقمه " وكلمه المرور الخاصه به والموجدين

في جدول Users وأن هناك 3 محاولات له إذا لم يستطيع خلالها الدخول

فيتم تحويل حالة المستخدم من ACTIVE إلى DISABLED

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

كماأن هناك جدول ذكرتة في الTrigger إسمه LOG حيث

لاحظت انه يتم بعد فشل المحاولة الثالثة يتم إدخال رمز المستخدم

والتاريخ وإعطاء رقم لعملية الادخال هذه عن طريق SQUENCE

إسمه S_LOG .

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

فعليا هو المتصل بقاعدة البيانات إلا إذا كان هو المشغل الاول للنموذج .

كماأن جميع الصلاحيات التى لدي المستخدم لن يتمكن من الاستفادة منها

بل يتم إستخدام صلاحيات المتصل فعليا بقاعدة البيانات

صحيح يمكنك من تحديد صلاحيات على النموذج ولكن لن تكون بنفس الفاعلية

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

وعلى حسب تجربتي في إستخدام الDeveloper فلم أجد أي قصور من ناحية الامن به

بل نفس الامن الموجود في قاعدة البيانات موجود في الDeveloper

طبعا لو كان المستخدم هو المتصل بقاعدة البيانات

حيث أن المستخدم الذي ليس لديه صلاحية select فلن يستطيع الاستعلام حتى لو يوجد button

مخصص للإستعلام سواء في الmenu أو في النموذج

طبعا موضوع الامان موضوع مهم جدا جدا وموضوع كبير

وإذا اراد الاخوان أن يكون هناك موضوع مخصص للأمن في ال Developer

فلنبدء بفتح موضوع جديد وليكن إسمه " الامن في الDeveloper "

حيث يمكننا من عمل menu وبها نتحكم بال buttons الموجوده بها

بحيث تكون بعض ال buttons غير فعاله لمستخدمين محددين

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

شكرا للأخ فايز واهلا وسهلا بك مرة اخري

وارجوا منك ان تتقبل كلامي وان تصححه لو وجد خطاء فيه

كما أرجوا من الاخوه التفاعل مع الموضوع لأهميته بالنسبه لمستخدمي الDeveloper

عمر محمد باعقيل

المدينه المنوره

baaqeel@onebox.com

#7

السلام.. الاخ عمر محمد باعقيل ، شكرا على الايضاح واتفق معك في مجمل الي طرحته و أوافقك الرأي يمكن ان نجعل كل مستخدم يتصل بقاعدة البيانات مباشرة وفي ال Developer عن طرق ال Menu نستخدم ال ٌRoles لاعطاء الصلاحيات بدون أي قصور في الحالات العادية وبدون حماية احترافية و متطورة واللي تطبقها جميع المشاريع الضخمة ، في بهذه الطريقة تفقدك وتقييدك بحيث لا تستطيع مثلا في معظم البرامج الكبيرة تتطلب وجود تاريخ معين لانتهاء هذا المستخدم من العمل في البرنامج او وقفه مؤقتا لإيجازه أو انتقاله إلى قسم آخر ،

أيضا في بعض الشركات الكبيرة يجب وضع ما يسمى ب Session Manager ليخول معرفة المستخدمين الذين متصلين حالين بالنظام وحتى إمكانية إخراجهم منها ، و طبعا هذا كله يجب أن يقوم به عن طريق ال Client وعدم استخدام ال ٍServer الذي يوجد به قاعد البيانات وتعطى هذه الصلاحيات فقط لل Admin ولا يقصد هنا بالمشرف على قاعدة البيانات بل شخص من الذين يستخدمون البرنامج كالمدير أو ما شابه لكي يتمكن مباشرة من تنشيط المستخدم الذي انتهت مدة استخدامه ، أو إنشاء مستخدم مباشرة وذلك عن طريق شاشة يوجد بها جميع الشاشات الموجودة في النظام التي سوف يحصل على بعضها المستخدم الجديد و تحديد المجموعة التي ينتمي إليها و يفترض بأنه لا يعرف أي شي عن الاوراكل .

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

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

والغريب انه صادفنا أحيانا مستخدمين لا يريدون ان يقوم بعملية الBACK UP عن طريق ال Server فاضطررنا بإنشاء Batch File ووضعه على ال DeskTop .

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

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

شاكر لك حسن متابعتك معي وهذا يعكس مدى وعيك لأهمية الموضوع ..

ارجو التعقيب لأي ملاحظة أو الاستفسار ونحن في الخدمة دائما..

#8

السلام عليكم ورحمة الله وبركاته

الاخ ماجد

شكرا لك على الرد

وبالنسبه لموضوع الاتصال بقاعدة البيانات

فانا لاأري أي تقييد في ذلك وسوف اقول لك لماذا

فلقد قمت بعمل برنامج صغير نوعا ما

وبه يتصل كل مستخدم عند إستخدامه بقاعدة البيانات

وقمت بعمل 4 Roles وهيا كالتالي :

1- الصلاحيات المالكه

2- الصلاحيات الاداريه

3- صلاحيات الاستقبال

4- صلاحيات الاستعلام

وكانت ال Menu كما ذكرت تظهر بعض ال buttons لمستخدمين أصحاب صلاحيات معينه فعاله

وبعضها غير فعال لهم وهكذا.

اما بالنسبه للعمليات الاداريه مثلا : لتغيير صلاحية مستخدم من صلاحيات الاستعلام فقط الى

الصلاحيات الاداريه فيتم ذلك من خلال شاشة في نفس النموذج اسميتها الشاشات الاداريه كما يمكنك في

نفس الشاشات الاداريه من تغيير كلمه المرور للمستخدم كما يمكنك في هذه الشاشات الاداريه من إنشاء مستخدم جديد

ومنحه الصلاحيه التى تريدها ويمكنك من حذف مستخدم ما موجود لديك, كما يمكنك من سحب صلاحيه create session

والتى تسحب من المستخدم لو اخذ إجازه مثلا ويمكنك من إعادتها له أيضا من خلال الشاشات الاداريه في ثانيه واحده,

كما يمكنك من فصل المستخدم إذا كان متصلا بقاعدة البيانات فورا " Kill Session "وطبعا كل ذلك يتم بالضغط علي

الزر المخصص للعمليه التى تريدها بدون أي معرفه بأوامر SQL فلا تقييد وقد راعيت ان المدراء أغلبهم لايعلموا

كيفيه إستخدام SQL كما قمت بعمل Auditing " تدقيق " على جداول معينه مثل جداول الحسابات ووضعتها

في شاشات أسميتها شاشات التدقيق وبها يستطيع المدير ان يعرف كل من قام بعمل اي سجل ويعرف من قام

بعمليه Update وعلى ماذا حدثت عمليه الUpdate وماهى القيمه القديمه للحقل قبل ال Update والقيمه الجديده

بعد الUpdate ونفس الشي لو قام مستخدم بعمل Delete , كما يظهر إسم المستخدم وتاريخ العمليه ونوع العمليه

وطبعا كل هذه الشاشات " الشاشات الاداريه" و " شاشات التدقيق " لن يستطيع الوصول اليها الا المستخدمين الذين

لديهم الصلاحيات المالكه , طبعا هناك امكانيات كبيره جدا جدا يمكنك من عملها فلا أظن انك تستطيع عمل

أي شي عن طريق الSQL ولايمكنك من عمله من خلال الDeveloper وطبعا من خلال الDeveloper سيكون

اسهل وابسط للمستخدم النهائي , ولكن لن يتم ذلك الا من خلال الاتصال بقاعدة البيانات مباشرة من قبل

المستخدم نفسه لكي تستطيع التحكم به .

ربما تكون عمليه الاداره من خلال إستخدام الDeveloper صعبه بالنسبه للمبرمج نوعا ما خلال إنشاءه للشاشات

ولكنها سهلة جدا والافضل لمدراء الشركات واصحاب الشركات بالتحديد لعدم معرفتعم بإستخدام الSQL كما انك

بهذه الطريق " الاداره من خلال الشاشات " تجعل برنامجك شبه متكامل بإذن الله وقوي وافضل للبيع .

ولقد كنت قبل 3 سنوات اعمل في عمل موسمي " إدخال بيانات " وكان البرنامج كله أرواكل " قاعدة البيانات و الشاشات

مبنيه بإستخدام الDeveloper " ولم نكن نتصل بقاعدة البيانات وكانت الاختراقات كثيره جدا والامن ضعيف جدا

مع العلم ان البيانات التى كنا ندخلها كانت مهمه جدا .

ارجوا ان اكون قد وفقت في إيصال فكرتي لك , وارجوا ان تتقبل كثرة كلامي ولكن الموضوع كما ذكرت لك

مهما جدا جدا

كما ارجوا ان تخبرني إذا كان هناك شي حاولت ان تعمله بالDeveloper طبعا من ناحيه

الاداره ولم تتمكن من عمله لكني نحاول عمله مع بعض .

عمر محمد باعقيل

المدينه المنوره

baaqeel@onebox.com

#9

الأخ ماجد

اتوقع انه لايوجد داعي لتخزين كلمة السر في جدول والاكتفاء بكلمة السر المخزنة في النظام بحيث تظهر مشفرة ولايمكن لأحد معرفتها .

هذا الموضوع مغلق.

مواضيع مشابهة