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

حول الحماية

مغلق
بدأه جمال ابو ايهم في 20 أغسطس 2004 · 19 رد · 1,707 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لدي برنامج وضعت الجداول في قاعدة بيانات وباقي العناصر في قاعدة بيانات أخرى

كيف أحمي قاعدة البيانات مما يلي:

1. أن لا تظهر أنها أكسس أي اغير نوع الملف مثل Dat ( وقد استخدمت طريقة تشغيل البرنامج بدون أكسس من خلال تثبيت RunTime حصلت عليه من المنتدى سابقاً ويعمل بشكل رائع)

2. أربط قاعدة البيانات برقم الهارد ديسك لمنع نسخها لجهاز آخر

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

هل الخطأ في الكود أم في طريقة العمل علماً أني استخدمها مع access XP

الطريقة :

في الوحدة النمطية العامة اكتب :

Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" ( _

ByVal lpRootPathName As String, _

ByVal lpVolumeNameBuffer As String, _

ByVal nVolumeNameSize As Long, _

lpVolumeSerialNumber As Long, _

lpMaximumComponentLength As Long, _

lpFileSystemFlags As Long, _

ByVal lpFileSystemNameBuffer As String, _

ByVal nFileSystemNameSize As Long) As Long

وفي حدث عند نقر زر أمر اكتب :

Dim disk As String

Dim serialnum As Long, serial As String

disk = "c:\" 'غير الى القرص الذي تريد

RetVal = GetVolumeInformation(disk, NomVolume, Len(NomVolume), _

serialnum, dum, dum, ResStr, Len(ResStr))

'استخراج الرقم التسلسلي

serial = Right(String(8, "0") + Hex$(serialnum), 8)

serial = Left(serial, 4) + "-" + Right$(serial, 4)

MsgBox serial

أو من لديه حل أفضل فليفيدني رعاكم الله

jmt

#2

ألا يوجد من يفيد في ذلك

jmt

#3

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

افيدوني رعاكم الله ؟؟؟؟؟؟؟؟؟ حتى لو لم يكن لديكم الحل ولكن اريد ان اعرف هل هذا صحيح

jmt

#4

أخي الكريم

بالنسبة لرقم الهارد دسك فهناك من يقرأه ثم يضعه ضمن الكود وعند تشقبل القاعدة تتم قراءة رقم الهارد دسك وتقارن بالرقم المكتوب في الكود

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

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

#5

معلش اخ مهند :

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

هل هو نفس الكود السابق الذي وضعته ... وأين نضعه

حبذا لو مثال على ذلك...... واسفين للازعاج

jmt

#6

أخي الكيم

هذا كود جلب رقم الهارد دسك (ضغه في وحدة نمطية )

Declare Function GetVolumeInformation Lib "kernel32.dll" Alias _
"GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal _
lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Integer, _
lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, _
lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal _
nFileSystemNameSize As Long) As Long

Function GetSerialNumber(strDrive As String) As Long
Dim SerialNum As Long
Dim res As Long
Dim Temp1 As String
Dim Temp2 As String
Temp1 = String$(255, Chr$(0))
Temp2 = String$(255, Chr$(0))
res = GetVolumeInformation(strDrive, Temp1, _
255, SerialNum, 0, 0, Temp2, 255)
GetSerialNumber = SerialNum
End Function

في البرنامج عند حدث (عند التحميل) للنموذج الرئيسي نكتب :

If GetSerialNumber("c:\") <> "تكتب هنا رقم الهارد الذي يكون معروفاً لك سابقاً" then
     msgbox "النسخة غير شرعية"
    quit
end if
#7

أخي مهند أشعر أن الكود ناقص :

كيف سيتم عرض رقم الهارد ديسك دون ربط function بزر أمر لعرض رسالة برقم الهارد ديسك

ألا توافقني الرأي

وإذا كان هناك نقص فما هو الكود الناقص

jmt

#8

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

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

#9

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

/index.ph...topic=42626&hl=

ريح من الزفرات تعصف في الحشى &&& و ورائها مطر من العبرات

ابو حسن

#10

اخي العزيز ....

1- يمكنك عمل كود داخل ملف اكسس فلنسميه Install حيث يعمل هذا الكود على كتابة قيمة داخل ريجستري ( Register ) الويندوز

2- ثم يعمل كود داخل برنامجك الخاص

عند تشغيل البرنامج يقوم هذا الكود بقراءة قيمة الريجستري الذي تم كتابته بواسطة برنامج Install .

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

#11

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

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

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

مع كل الشكر والتقدير

jmt

#12

هناك أفكار أخرى للحماية

1 - حول البرنامج الى الصيغة mde بدلا من mdb

2 - الغي خاصية الشفت

3 - ضع رقم سري على قاعدة البيانات التي تحتوي على الجداول

4 - يمكن انشاء ملف نصي على دليل معين من مثلا على الدليل ويندوز وبه رقم

5 عندها يتم التشييك على هذا الملف السري وبدون هذه الملف لا يعمل البرنامج وهذا الاسلوب افضل من رقم الهاردسك أو الجهاز

6 - يمكن عمل عداد داخل قاعدة البيانات لمتابعة عدد مرات تشغيل البرنامج

7 - باختصار يوجد عدة طرق تحمي النظام

8 - ولكن الأهم من ذلك أن حماية البيانات ضعيفة بالاكسس أي بسهولة يوجد ملف يستطيع كسر الرقم السري ومن ثم يمكن العبث بالبيانات

9 - كذلك يستطيع أي مبرمج فيجوال بيسك كسر عملية الغاء الشفت

10 - تبقى اكسس رائعة ولكنها ضعيفة بمجالات عدة

تحياتي

#13

الاخ العزيز كيف يتم ربط الملف النصي بقاعدة البيانات

لابد من وجود كود لذلك .. اذا امكن

jmt

#14

هذا الكود لانشاء ملفات داخل الدليل windows ولا أحد يستطيع الانتباه اليها لانها ملفات غير مفهومة لكن نظامك سيعتمد عليها

On Error Resume Next

Dim ad As Long

ad = (Me!ser_no + 4567) * 6

If Me!a = ad Then

Dim a1 As Double, a2 As Double, a3 As Double

a1 = 6007001234#: a2 = 8001245167#: a3 = 7001234567#

Open "c:\windows\file1.ini" For Output As #1

Write #1, a1: Close #1

MsgBox "تم قراءة معلومات الجهاز بنجاح", vbInformation, "معلومات"

Me!exit.SetFocus

Else

MsgBox "تأكد من الرقم السري", vbInformation, "تنبيه"

Me!a.SetFocus

End If

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

On Error GoTo ed:

Dim a1, a2, a3

Open "c:\windows\file1.ini" For Input As #1

Do While Not EOF(1)

Line Input #1, a1

Loop

If a1 <> 6007001234# Then

DoCmd.Quit acQuitSaveAll

Else

End If

Close #1

الان هل الفكرة واضحة أم لا

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

تحياتي وأرجو الاستفادة

#15

أخب العزيز يلي فهمته أني أنشئ ملف بإسم file1.ini

واضع ضمنه الكود والاول واحفظه في مجلد ويندوز

ولكن أين أضع الكود التالي في برنامجي ... جربت في وحدة نمطية جديدة ولم ينجح

وك ذلك في نموذج عند تحميله ولم ينجح

jmt

#16

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

والفكرة رائعة ارجو التجاوب

لنستوعب الفكرة جيدا

وجزاكم الله كل خير

#17

أخي الكريم

تحية وبعد

عملت لك ما تريد وهي عبارة عن قاعدتين لا تعمل القاعدة الثانية الا من خلال القاعدة الاولى وهي اجابة على سؤالك

يرجى قراءة الكود والتمعن به

طبعا هذه طريقة من عدة طرق لحماية نظامك

و لا تنسى انه يجب تحويل النظام ال mde

تحياتي وأرجو أن تكون قد وضحت الفكرة

#18

أخي الكريم

تحية وبعد

عملت لك ما تريد وهي عبارة عن قاعدتين لا تعمل القاعدة الثانية الا من خلال القاعدة الاولى وهي اجابة على سؤالك

يرجى قراءة الكود والتمعن به

طبعا هذه طريقة من عدة طرق لحماية نظامك

و لا تنسى انه يجب تحويل النظام ال mde

تحياتي وأرجو أن تكون قد وضحت الفكرة

q.zip

#19

الف شكر استاذنا الحبيب

الفكرة رائعة جزاك الله كل خير

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

بارك الله فيك

#20

اخي العزيز فكرة رائعة جدا جدا جدا

وبصراحة هذه اقوى طريقة حماية رأيتها في أكسس

أشكرك من كل قلبي أخي العزيز على هذا التعاون

jmt

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

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