بتاريخ: 6 أبريل 200719 سنة comment_96245 السلام عليكم ............................................قد تحتاج لتغير كلمات المرور بشكل دوري للمستخدمين في هذه الحالة لنفرض انك الشخص المكلف بعملية تغير كلمات المرور ولنفرض ان هنالك مجموعة كبيرة من المستخدمين في قاعدة البيانات (العيوب) :1-ستقوم بالتبديل يدويا وهذا متعب .2-إهدار للوقت .غير ذلك من العيوب ..... .هنا وقفت وفكرت في عمل فورم تقوم بتغير كلمة المرور آليا حيث تؤدي وظائف عكس الأحداث السابقة .المتطلبات :1-جدول للمستخدمين .يحتوي على (اسم المستخدم + كلمة المرور الحالية + كلمة المرور السابقة) .2-FUNCTION . تزيل كلمة المرور السابقة .3-.PROCEDUREيمنح كلمة المرور الجديدة .آلية تبديل كلمة المرور التي استخدمتها :من المعروف أن كلمة المرور تحتوي دائما على (ارقام وحروف وبعض الرموز المسموحة بها) فلذلك عملت السلسة التالية حيث يتم من خلالها منح كلمات المرور.آليا ('abcdefghijklmnopqrstuvwxyz1234567890') لنسمي هذه السلسة بـXالسؤال الآن كيف تتم عملية التبديل آليا ؟؟الطريقة سهلة لأن المطلوب تبديل كلمة المرور مع شرط عدم حصول المستخدم عليها مرة أخرى مثال :أثناء إنشاء مستخدم ليكن : SCOTTوكلمة مرور :TIG107ER سوف يتم إزالة الحروف من السلسة X بعد ذلك ستحصل على سلسة جديدة ومن خلال هذه السلسة سيتم إعطاء المستخدم كلمة المرور الجديدة هذا مختصر آلية التبديل وبناء على ذلك عملت function التاليةوالتي بدورها إزالة حروف كلمة المرور السابقة .FUNCTION FUNCTION erase_last_pass(pass VARCHAR2) RETURN char IS NEW_PASSWORD VARCHAR2(50(; main_password varchar2(50):=('hfgacbedlikjpnmowqrzsxyvut8142367950'); BEGIN new_password:= replace(translate(main_password ,pass,'________'),'_'); RETURN (NEW_PASSWORD); END; procedure:يأتي الآن وظائف procedure الذي يمنح المستخدم كلمة المرور الجديدة بعد إزالة كلمة المرور من السلسة x)) وهي :1-يقوم بتقسيم السلسلة x إلى أربعة أجزاء وكل جزء يحتوي على 7 حروفلماذا استخدمت هذه الخاصية ؟؟؟؟ الجواب* السلسة x تحوي 36من( حروف و ارقام ) والمطلوب من البرنامج ان يعطي المستخدم كلمة مرور= 8 أحرف لذلك نطلب من البرنامج ان يزيل 8 حروف(لكلمة المرور السابقة) من السلسة وبعد ذلك يكون عدد السلسة هو 28 ومن خلال هذه العملية نستنتج أن 28÷4=7 وهي عدد الحروف لكل مجموعة2-بعد تقطيع السلسة x إلى أربعة أجزاء يأخذ ثلاثة حروف من الجزء الأول والثانيوحرف من الجزء الثالثة والرابعة حتى يكون العدد 8 هنا مشكلة كبيرة هذه الآلية قابلة للكشف أثناء الملاحظة القوية من المستخدم ماهو الحل؟؟؟؟؟الجواب يوجد متغير في procedure يأخذ قيمة اليوم وبناء على اليوم تختلف طريقة إعطاء كلمة المرور الجديدة فإذا كان اليوم (السبت أو الأحد أو الاثنين)سيقوم كما قلنا بأخذ ثلاثة حروف من الجزء الأول والثاني وحرف من المجموعة الثالثة والرابعة حتى يكون العدد 8 , أما إذا كان اليوم (الثلاثاء أو الأربعاء أو الخميس أو الجمعة) ستختلف طريقة إعطاء كلمة المرور عن الأيام الأخرى وستكون كالتاليثلاثة حروف من المجموعة الثالثة والرابعة وحرف من المجموعة الأولى والثانية حتى يكون العدد 8 لكلمة المرور الجديدة .3- من وظائفه ايضا المحافظة قدر الممكن على عدم إعطاء المستخدم كلمة مرور سابقة فإذا تعارضت كلمة المرور السابقة مع الحالية سيقوم بإنشاء سلسة جديدة . PROCEDURE get_new_pass(passwords varchar2) IS /*========================================================== I USE SUBSTR FUNCTION FOR CUTTING THE PASSWORD TO 4 PARTS ==========================================================*/ group1 varchar2(7);-- the first group contain 7 letters group2 varchar2(7);-- the first group contain 7 letters group3 varchar2(7);-- the first group contain 7 letters group4 varchar2(7);-- the first group contain 7 numbers day_of_week NUMBER(2) := TO_CHAR(SYSDATE,'D'); new_password varchar2(8); pass_length number:=0; erase varchar2(36):=passwords; BEGIN if length(passwords)>28 then pass_length :=length(passwords)-28; pass_length :=pass_length+1; erase:=substr(passwords,pass_length); end if; if length(erase)=28 then group1 :=substr(erase,1,7); group2 :=substr(erase,8,7); group3 :=substr(erase,15,7); group4 :=substr(erase,22,7); if day_of_week<=3 then --<< day_of_week=(saturday+sunday+monday) group1:=substr(group1,1,3); group2:=substr(group2,1,3); group3:=substr(group3,1,1); group4:=substr(group4,1,1); new_password:=group1||group3||group2||group4; :cc.newpass:=new_password; if :last_pass=:cc.newpass then :global.changepass:=substr(:last_pass,1,4)||substr(:curre_pass,1,4); :global.reget_pass:= erase_last_pass(:global.changepass); get_new_pass(:global.reget_pass); end if; else --<< day_of_week=(tuesday+wednesday+thursday+friday) group3:=substr(group3,1,3); group4:=substr(group4,1,3); group2:=substr(group2,1,1); group1:=substr(group1,1,1); new_password:=group3||group4||group2||group1; :cc.newpass:=new_password; if :last_pass=:cc.newpass then -- when the [last password] conflict with [new password] :global.changepass:=substr(:last_pass,-4)||substr(:curre_pass,-4); :global.reget_pass:= erase_last_pass(:global.changepass); get_new_pass(:global.reget_pass); end if; end if; else message('ERROR AT CREATE PASSWORD'); end if; END; وهذه الفورم والملفات ............................... تحياتيchange_automatic.zip تقديم بلاغ
بتاريخ: 6 أبريل 200719 سنة كاتب الموضوع comment_96282 كل مايهم ياشباب الحصول على وجهات نظركم ......................................... لأنها مهمه بالنسبة لي تقديم بلاغ
بتاريخ: 6 أبريل 200719 سنة comment_96292 عمل اكثر من رائع اكمل فى مواضيعك فهي مهمة ومفيدة وفى انتظار الجديد من افكاركوشكرا ميجا تقديم بلاغ
بتاريخ: 7 أبريل 200719 سنة comment_96307 فكرة رئعه اخى skyعلى فكره انا عندى طريقه بص الصراحه مجربتهاش انى استخدم العشوئيه فى اختيار الارقام او الحروف اعتقد دى ممكن تكون امان اكثر بس اكيد فكرتك ممتازه و اكيد اخذت منك وقت و مجهود تستحق له التقدير ايهاب وجدى تقديم بلاغ
بتاريخ: 7 أبريل 200719 سنة كاتب الموضوع comment_96388 والله مشكورين ياشباب للتشجيعاخي ايهاب هذا المجهود الذي قمت به انا لايساوي قطرة ماء مقارنة بما قدمته انت والأعضاء الطيبين وبالمناسبة إذا اردت طريقة توزيع كلامات المرور تكون اكثر صعوبة تستطيع التحكم بناء على الأيامواي توضيح انا حاضر تقديم بلاغ
بتاريخ: 8 أبريل 200719 سنة كاتب الموضوع comment_96512 الأخ ايهاب ممكن تضع او ترسل الطريقة التي تحدثت عنها تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.