-
PDA

عرض كامل الموضوع : كيف نتعامل مع كلمة السر في ملفات اكسيس


keko
19/12/2003, 10:29
كيف نتعامل مع كلمة السر في ملفات اكسيس

كما نعرف، بالنسبة ل ADO يجب تحديد صيغة التوصيل Connection String التي تتضمّن خصائصا مثل وسيط محرك قواعد البيانات و اسم قاعدة البيانات نفسها ثم أية خصائص أخرى تكون لازمة للربط مع قاعدة البيانات و فتحها مثل كلمة السرّ إذا كانت مطلوبة.
اذا افترضنا ان لدينا مكوّن ADOConnection1 ، فاننا عادة ما نأتي الى خاصّية ConnectionString لبناء جملة أو صيغة التوصيل من خلال نافذة Data Link Propertis .
بالنسبة لقاعدة بيانات اكسيس عادة ما يكون الوسيط أو المقدّم provider لمحرك قاعدة البيانات هو: Microsoft.Jet.OLEDB.4.0 Provider، ثم نقوم بتحديد مكان و اسم قاعدة البيانات الذي سنفترض انها : C:\Db.mdb كما هو موضح في الشكل التالي.

نفترض ان اسم المستخدم هو الاسم الافتراضي الذي يعطى عند تكوين قاعدة بيانات اكسيس ، و الذي يظهر آليا في النافذة.
الآن نأتي لكلمة السرّ. لو كانت قاعدة البيانات خالية من كلمة سرّ فان صيغة التوصيل تكون قد اكتملت عند هذا الحدّ ، و يمكن التأكّد من ذلك من خلال الضغط على زرّ اختبار التوصيل Test Connection. أما لو كان لقاعدة البيانات كلمة سرّ فان الاختبار سيفشل معلنا عن عدم صلاحية كلمة السرّ.
لتحديد كلمة السرّ في صيغة التوصيل - وعكس ما هو متوقع - لن نحددّها في خانة Password في نفس الصفحة، بل نتركها كما هي و ننتقل الى صفحة All و التي بها كافة الخصائص التي يمكن توصيفها لصيغة التوصيل.

في هذه الصفحة سنجد الخاصية: Jet OLEDB:Database Password ؛ و فيها يتم تحديد كلمة السرّ. نضع المؤشر على هذه الخاصّية كما في الشكل أعلاه ، ثم نضغط على زرّ كتابة القيمة Edit Value . هنا ستظهر نافذة كما في الشكل التالي لكتابة قيمة الخاصية أو كلمة السر ، و لتكن abc .

بعد تحديد كلمة السرّ، يمكننا العودة الى صفحة Connection و اعادة اختبار التوصيل. ثم الموافقة على صيغة التوصيل التي تمّ بناؤها و العودة الى نافذة الخصائص في دلفي. سنلاحظ أن جملة التوصيل تم وضعها أمام خاصية ConnectionString .


التعامل مع كلمة السر داخل التوليف:
أحيانا قد تحتاج الى تحديد جملة التوصيل بكاملها أو احدى أو بعض خصائصها أثناء تشفيل البرنامج و ليس عند التصميم، كأن تريد أن تلتقط مسار و اسم قاعدة البيانات من ملف خارجي، أو أن تتحصلّ على اسم المستخدم أو كلمة السر من المستخدم.
لو اقتربنا من جملة التوصيل Connection String في النافذة السابقة (تأكد من أن خاصية Connected قيمتها سالبة) و شاهدناها كاملة ستكون غالبا بالصيغة التالية:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Db.mdb;Persist Security Info=False;Jet OLEDB:Database Password= abc
و إذا قسّمناها حسب أجزائها ستكون كما يلي:
Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=C:\Db.mdb;
Persist Security Info=False;
Jet OLEDB:Database Password= abc

لذلك يمكننا تقديم جملة التوصيل داخل التوليف كما يلي:

procedure TForm1.Button1Click(Sender: TObject);
begin

ADOConnection1.Connected := false;
ADOConnection1.ConnectionString :=
'Provider=Microsoft.Jet.OLEDB.4.0;' +
'Data Source=C:\Db.mdb;' +
'Jet OLEDB:Database Password=abc';

ADOConnection1.Connected := true;

end;

أو ربّما تقوم بتحديد صيغة التوصيل في زمن التصميم دون تحديد كلمة السر، و يتم تقديم كلمة السر عند محاولة فتح التوصيل أثناء التشغيل، بحيث يتم تحديد خاصية كلمة السرّ فقط كالتالي:
procedure TForm1.Button1Click(Sender: TObject);
begin

ADOConnection1.Connected := false;
ADOConnection1.Properties[
'Jet OLEDB:Database Password'].Value := 'abc';
ADOConnection1.Connected := true;

end;

مكان آخر أكثر مركزية يمكن فيه تحديد جملة التوصيل أو إحدى خصائص التوصيل، و هو حدث BeforeConnect التابع لمكون ADOConnection. هذا الحدث يطرأ مباشرة قبل قيام المكون بفتح التوصيل،
procedure TForm1.ADOConnection1BeforeConnect(Sender: TObject);
begin

ADOConnection1.Properties[
'Jet OLEDB:Database Password'].Value := 'abc';

end;


نعيد التذكير بأنه يمكن تحديد أية خاصية بصورة منفردة من خلال خاصية Properties التابعة لمكوّن ADOConnection، مثلا يمكن تحديد خاصية مورد البيانات Data Source كالتالي:
ADOConnection1.Properties['Data Source'].Value := 'C:\Db.mdb';

كلمة أخيرة:
تخصيص كلمة سرّ لقاعدة البيانات يراد به قصر فتح قاعدة البيانات و الاطلاع على محتوياتها على من هم مخوّل لهم بذلك. و برغم أن حماية كلمة السرّ غير مضمونة أمام محاولات المتطفلّين لكشفها خاصة في ملفات اكسيس؛ فإن هذا لا يمنعنا من جعل هذا الأمر أكثر صعوبة. لذلك فان الأمر يتطلب مزيدا من الحماية على مستوى التوليف نفسه. لماذا؟ لأنك لو قمت بفتح نسخة الملف التنفيذي (EXE) لبرنامجك بواسطة أي محررّ نصوص و قمت بالبحث فيه عن كلمة السرّ ستجدها واضحة و يمكن لأي شخص بقليل من الاحتراف أن يجدها، لأن التوليف المحوّل من قبل دلفي يبقي على الجمل النصيّة كما هي، حتى لو قمت بتفكيكها إلى أحرفها أو خصّصتها في متغيّر في اجرائية غير الاجرائية التي يتم فيها التعامل مع جملة التوصيل.
لذلك يستحسن دائما ترميز كلمة السرّ و الاحتفاظ بها داخل التوليف بصورة مشفّرة، و أن تقوم بفتح شفرتها عند القيام بفتح قاعدة البيانات.

keko
19/12/2003, 10:30
بالمناسبة أنا ما بفضل عتعامل مع الـAdo بالداتابيز
في بالدلفي أداة تانية أحسن برأيي
بركي منبقى منحكي عنا بعدين

باسل
19/12/2003, 14:48
يمكن رح يلاقي أغلب المشاركين إنو هالمقالة صينية أو سنسكريتية
بس بحب وضح شغلة أو بالأحرى بسط المفهايم شوي
أولا الADO هي ليست أداة كما سماها أخي كيكو
الموضوع هون عم يتحدث عن Active Data Object وهيدا مفهوم عام وضع من قبل واضعي أسس البرمجة غرضية التوجه أو ما يدعى OOP أو Object Oriented Programming
وبغض النظر عن اللغة المتبعة في البرمجة أكانت هي Delphi أو كانت VB أو حتى السكريبتات الأنية التنفيذ كجافا سكريبت وغيرها فهي جمعها بحاجة لتتعامل مع عناصر أخرى خارجية لكي تتستطيع التعامل والتخاطب مع قواعد البيانات وبالنسبة لـ ADO فقد كانت ولمدة طويلة من الزمن أكثر المفاهيم تطوراً في التعامل مع قواعد البيانات بشكل عام وليس فقط قواعد Access بل النظام نفسه يمكنه أن يؤمن لك التعامل وبسهولة مع Oracle أو SQL SERVER أو حتى يمكن التخاطب مع الدليل التفاعلي لويندوز Active Directory حيث يمكنك عن طريق ADO الاستعلام والبحث في اعادات الشبكات واستخراج أسماء المستخدمين أو الأجهزة المشتركة في نفس النطاق على سبيل المثال.
إذا ADO هي مجموعة من العناصر البرمجية التي تستخدم في كثير من اللغات البرمجية الأخرة للتعامل مع طيف واسع وكبير من قواعد البيانات ضمن بيئة ويندوز بشكل عام مهما كانت هذه القاعدة تبدا من ملفات نصية بسيطة CSV files إلى القواعد العلائقية الضخمة كـ SQL SERVER and ORACLE
في الحقيقة منذ أكثر من سنتين تقريباً جائتنا مايكروسوفت بالنسخة المطورة من ADO وهي تختلف كلياً عن النسخة القديمة وهي ADO.NET وقد تم برمجتها لكي تتعامل وبسرعة عالية مع طيف أوسع ليس فقط مع قواعد البيانات بل وحتى مع وسائل اتصال وبروتوكولات متعددة وما يميز هذه النسخة الجديدة كونها تتخاطب فيما بينها ومع بقية البيئات ببروتوكلات SOAP و XML
مما يجعلها تستطيع أن تتعامل مع بيئات وأنظمة غير ويندوز أيضاً مثل UNIX و Linux
وهذا ما يجعل من مبرمجي بيئة ويندوز أن يضعو برمجيات يمكنها أن تتعامل مع قواعد بينات MySQL أو غيرها من القواعد المعتمدة في نظام Unix و Linux

فقط أردت التوضيح كي لا تفهمو أن ADO هي أداة برمجية
فهي بعيدة بمفهومها عن أدواة ActiveX Object المستخدمة في دلفي و فيجوال بيسك بل وحتى تلك الأدوات المستخدمة لا تعمل بدون وجود ADO فهي تعتمد بالأصل على ADO في تنفيذ العمل

لكم تحياتي

Hus
20/12/2003, 04:45
انا بحب قول شغلي .. انا بعتقد بالكمبيوتر بشي بالنيب الي راسخ .. كل شي جديد هوي احسن من الي قبلو .. هيك انا عندي اعتقاد ما بشكل فيه ابدا .. الانو عادا الشكرات العملاقة مات بتاتي بشي جديد غير للتغطية على عيوب السابقين وادراج خواص اقوى و خلافو ..
انا خبرتي برمجيا بالتعامل مع قواعد البيانات متواضعة .. بس صراحة ما تعاملت بحايت غير مع الاADO بالدلفي انا ما كنت على اطلاع بغيرها .. ولما انتقلت للسي شارب .. وجدت انو الدعم الاساسي والتطوير الاساسي نالتهaDO بدون منافسة .. لدرجة ما كنت بتوقع في طريقة اخرى للتعامل من دون ال ADO ههههههه
ولما تجي شركة عملاقة متل مايكرو سوفت بلغة عملاقة متل السي شارب كاقوى لغة على الاطلاق بالتعامل مع ويندوز الحالي والمستقبلي بدرجة اكبر .. بدعم كامل لل ADO بيطرني سلم لهال الاداة .. بدون مجرد التفكير باداة اخرى ..

والله اعلم :D

keko
20/12/2003, 11:41
أولا القصد من كلمة أداة هي أدوات الوصول والإرتباط بقواعد البيانات مجرد تعبير ما لو علاقة بالـ activex وغيرو من الأدوات بالمناسبة بالنهاية كلن كائنات (objects) للعلم فقط...!
وأدوات الوصول هنن تلاتي متل ما بتقدم دلفي و C++ وأغلب اللغات ..
1- BDE (Borland Database Engine)
2- ADO
3- InterBase السريع
ثانيا للعلم كمان والتوضيح للشباب قاعدة بيانات أوراكل لا تسمى قاعدة بيانات علائقية بل تسمى قاعدة بيانات غرضية أو كائنيّة أو تسمى غرضية-علائقية حسب الإستخدام لها لكن في الأساس هي غرضية التوجه و إذا سميناها متل ماسماها أخي باسل علائقية منكون عم نساويها بـ Access اللي هوي بيطلع بمنتهى السخف أمامها..
تحياتي...!!!

باسل
20/12/2003, 18:31
حتى ما خربط حدا معي شباب
كلمة علائقية مقصود بها المصطلح الإنكليزي
Relational Database
وسأقتطف مقطعاًُ من مرجع "Introduction to relational Database"

"Access is a relational database but it is not a database server. mSQL, SQL Anywhere, DB2, Oracle are both relational databases and database servers. The Btrieve NLM is a database server but it is not a relational database."

يمكنك أخي كيكو قراءة بعض من هذا المرجع على العنوان
////////////// الروابط الي بيحطوها الأعضاء بيقدر فقط الأعضاء يشوفوها ، اذا مصرّ تشوف الرابط بك تسجل يعني تصير عضو بأخوية سوريا بالأول -///////////////
وبترجتمته للعربية يقول
قاعدة بانات أكسس هي قاعدة علائقية ولكنها ليست مخدم قواعد بيانات أما كل من
mSQL, SQL Anywhere, DB2, Oracle فهم قواعد علائقية ومخدم قواعد بيانات معاً. أما Btrive NLM فهي فقط مخدم قواعد بانات وليست قواعد علائقية"

keko
21/12/2003, 12:36
أنا رجعت للمرجع ومعك حق بانو امها غلائقية
لكن هذا لا يعني أنو هالشي بيتخذ نفس المعنى بأكسيس و أوراكل
لانو بأوراكل تغلب التعامل معها و اقوة فيها بالكائنات الممكنة فيها

باسل
21/12/2003, 13:20
بعتقد أخي كيكو إنو الشباب اللي بالمنتدى ما رح يفهمو الحكي اللي عم ندردش فيو
الفرق هو بإدارة القواعد
sql server and Oracel are Relational Database Management system

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

ميخوووووووو
02/10/2005, 17:52
شكرا كتير عالمعلومات الحلوة

henry6600
05/01/2008, 20:53
thanksss