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

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

مغلقرائج
بدأه أمجد جمالي في 2 أبريل 2005 · 20 رد · 25,091 مشاهدة · في قسم أرشيف الحماية والامان
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

مسألة حماية قواعد البيانات من اكثر المهام اهمية وأولوية بالنسبة للمبرمج وهناك وجهان رئيسيان لحماية قواعد البيانات الاول متعلق بك انت كمبرمج وكيفية حماية حقوقك الفكرية والثاني متعلق بالعميل المستخدم للبرنامج وكيفية منح الصلاحيات للمستخدمين

في موضوعي رح اتناول المفهوم الثاني للحماية بالتفصيل وبالشرح الممل ومدعوم بالأمثلة

وبإذن الله رح حط كل خبرتي في هذا المجال هون في هذا الموضوع ولن ابخل بأي شيء.

اما بالنسبة للمفهوم الأول من الحماية اترك لكم مهمة البحث في قسم خلاصة المشاركات وهي وافية وكافية.

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

التخطيط للحماية

ماهي الصلاحيات التي يجب ان اعدها

كيف اتجنب الأخطاء الشائعة الموجودة في نظام الحماية

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

برمجة الحماية والشفرة مكتوبة بواسطة ADO

Programming Security with ADO

ولن اترك اي sector او سطر كود الا وسوف اشرحه بإذن الله

شكراً

يتبع

#2

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

بسم الله نبدأ

1-التخطيط للحماية:

1-تصنيف المستخدمين الى مجموعات كل مستخدم ينتمي الى مجموعة عمل مثال على ذلك

مجموعة المحاسبة

مجموعة مدخلين البيانات

مجموعة المشرفين

2-توزيع الصلاحيات على المجموعات وتجنب اخي الكريم تجنب توزيع الصلاحيات على لكل مستخدم على حدا

لأنه من السهل توزيع الصلاحيات على اربع او خمس مجموعات ونسبة وقوع الخطأ تكون 5-10 % ومن الصعب ضبط و توزيع الصلاحيات عى 30 مستخدم أو اكثر تكون نسبة الخطأ تتجاوز 50% وهذه من واقع تجربة

3-برمجة نموزج تسجيل دخول الى البرنامج تتألف من ثلاثة خالنات

أسم المستخدم

أسم مجموعة العمل

خانة إدخال كلمة المرور

3-حماية البيانات من التعديل والحذف او الوصول اليها من المستخدمين

4-التحقق من خصائص النظام قبل الدخول الى البرنامج

5-منع الوصول الى بعض النمازج من خلال حماية القوائم

6-عمل مخطط للصلاحيات للرجوع إليها مستقبلاً كما هو موضح في الصورة

PIC002.png

7-النسخ الإحتياطي الألي لقواعد البيانات

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

dbSecCreate
dbSecDBAdmin
dbSecDBCreate
dbSecDBExclusive
dbSecDBOpen
dbSecDelete
dbSecDeleteData
dbSecFullAccess
dbSecInsertData
dbSecNoAccess
dbSecReadDef
dbSecReadSec
dbSecReplaceData
dbSecRetrieveData
dbSecWriteDef
dbSecWriteOwner
dbSecWriteSec

هذه الأوامر لحماية او ازالة الحماية من الجداول الإستعلامات النماذج التقارير والماكرو

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

dbSecFullAccess "إضافة او إزالة جميع الإذونات"
dbSecInsertData "إضافة أو إزالة خاصية إدخال البيانات"
dbSecReadDef "إضافة أو إزالة خاصية قرائة التصميم"
dbSecRetrieveData "إضافة أو إزالة خاصية الوصول أو قراءة البيانات"
dbSecReplaceData "إضافة أو إزالة خاصية التعديل على البيانات"
dbSecDeleteData "إضافة أو إزالة خاصية حذف البيانات"

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

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

PIC001.PNG

شكراً

يتبع

#3

مرفق الكود الخاص بإضافة وإزالة الصلاحيات برمجياً مع الشرح

الدالة Ap_AssignPermissionAdd تقوم بإضافة الصلاحيات

والدالة Ap_AssignPermissionRemove تقوم بإزالة الصلاحيات

عليك تمرير 4 بارمترات عند تجربة أي دالة من الدالاتين وهي

1-أسم المستخدم أو أسم المجموعة(الخاصة بالأوفيس وليس شاشة التسجيل الدخول)

2-أسم الكائن وليكن اسم الجدول او اسم الاستعلام

3-نوع الكائن جدول او نموزج اوتقرير

4-اسم الصلاحية التي تريد اعدادها للمستخدم او المجموعة

هذا هو الكود مع الشرح

Public Function Ap_AssignPermissionAdd(StrUserName, StrObjectName, StrObjectType, FlgPermission)

'-- StrUserName Parameter Accepting UserName or Group Name
'-- StrObjectName Parameter Means Table Name or Quiry name
'-- StrObjectType Parameter Means Tables,Quires,Forms,Reports And Macros
'-- FlgPermission Parameter Can be Any of Security Permission Constants

On Error GoTo ErrAssignPermissionAdd

   Dim Db As Database
   Dim Con As Container
   Dim Doc As Document
   
   '-- Take The Object Type and Object Name Parameters to Find The Object
   Set Db = CurrentDb
   Set Con = Db.Containers(StrObjectType)
   Set Doc = Con.Documents(StrObjectName)
   
   '-- Set The User or Group
   Doc.UserName = StrUserName
   
   '-- Does The Actual Sending of The Permission
   Doc.Permissions = Doc.Permissions Or FlgPermission
   
   '-- Function Complete Successfully
   Exit Function
   
ErrAssignPermissionAdd:
   DisplayMessageCritical "Function 'Ap_AssignPermissionAdd' did not complete successfully.", "Error Message"
   Exit Function
   
End Function

Public Function Ap_AssignPermissionRemove(StrUserName, StrObjectName, StrObjectType, FlgPermission)

On Error GoTo ErrAssignPermissionRemove

   Dim Db As Database
   Dim Con As Container
   Dim Doc As Document

   Set Db = CurrentDb
   Set Con = Db.Containers(StrObjectType)
   Set Doc = Con.Documents(StrObjectName)
   
   Doc.UserName = StrUserName

   Doc.Permissions = Doc.Permissions And Not FlgPermission
   
   Exit Function
   
ErrAssignPermissionRemove:
   DisplayMessageCritical "Function 'Ap_AssignPermissionRemove' did not complete successfully.", "Error Message"
   Exit Function
       
End Function

مثال على إضافة جميع الصلاحيات للمستخدم الموجود حالياً على الجدول TblUser

Ap_AssignPermissionAdd CurrentUser ,"TblUser","Tables",dbSecFullAccess

مثال على إزالة جميع الصلاحيات لمستخدم يدعى Amjad من الجدول TblUser

Ap_AssignPermissionRemove "Amjad" ,"TblUser","Tables",dbSecFullAccess

للتحقق من أن الكود يعمل جيداً إذهب إلى User And Group Permission كما هو موضح في الصورة وتأكد من ذلك

PIC001.PNG

#5

موضوع ممتااااااااااااااز

ارجو الأستمرار إلى النهاية اخي امجد

#6

اخي العزيز

موضوع اكثر من رائع

ولا يستغني عنه اي مبرمج

تحياتي

#7

موضوع طبعا الكل يحتاجه ويبحث عن طرق الحماية بأكثر من شكل .

نشكر الأخ أمجد على ذلك ونتمنى المواصلة حتى النهاية .

#8

موضوع رائع اخي امجد وفقك الله وننتظر اكمال الموضوع

#9

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

الأخ الكريم/ أمجد

إختيار موفق للعنوان وللموضوع

فالعنوان شدني وأجبرني على الدخول ، والموضوع شيق ومهم وأن شاء الله أمل منك إكماله لأهميته بارك الله فيك وأجرك عليه.

ولك خالص تحياتي وتقديري.

ibnmusqat.gif
#10

يا أخي جهد والله متعوب عليه...

أكمل الدرس ونحن في انتظار المزيد

والظاهر إنه بدأت علامات الهوس علييييا في هذه المواضيع

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

#11

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

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

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

طريقة عمل البرنامج:

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

-فورم اسمه FrmMainMenu مهمته التحقق من أسم المجموعة وتشغيل ال Function الخاص بها

-يوجد جدول اسمه TblSetPermission يحتوي على اسماء الجداول والاستعلامات المراد توزيع الصلاحيات عليها

-يوجد ايضاً modules اسمه SetPermission فيه الكود الخاص بإضافة وإزالة الصلاحيات (تم شرحه مسبقاً)

-ويوجد ايضاً Functions وهي

'يقوم بإزالة جميع الصلاحيات من على الجداول والاستعلامات
'TblSetPermission الموجودة في الجدول 
Ap_CodePermissionNoAccess
'----------------------------------------------------------------------------
'يقوم بإضافة جميع الصلاحيات من على الجداول والاستعلامات
'TblSetPermission الموجودة في الجدول
Ap_SetPermissionFullAccess
'----------------------------------------------------------------------------
'يقوم بإضافة الصلاحيات من على اجلداول والاستعلامات
'TblSetPermission الموجودة في الجدول
'Data Entrey لمجموعة عمل
كما تم التخطيط له مسبقاً في خريطة الأذونات أنظر الى الصور في المشاركات السابقة'
Ap_CodePermissionDataEntrey
'----------------------------------------------------------------------------
'يقوم بإضافة الصلاحيات من على الجداول والاستعلامات
'TblSetPermission الموجودة في الجدول
'Accounting User لمجموعة عمل
كما تم التخطيط له مسبقاً في خريطة الأذونات أنظر الى الصور في المشاركات السابقة'
Ap_CodePermissionAccountingUser
'----------------------------------------------------------------------------
'يقوم بإضافة الصلاحيات من على الجداول والاستعلاامت
'TblSetPermission الموجودة في الجدول
'Supervisor User لمجموعة عمل
كما تم التخطيط له مسبقاً في خريطة الأذونات أنظر الى الصور في المشاركات السابقة'
Ap_CodePermissionSupervisorUser
'----------------------------------------------------------------------------
'يقوم بإضافة الصلاحيات من على الجداول والاستعلامات
'TblSetPermission الموجودة في الجدول
'Programming User لمجموعة عمل
كما تم التخطيط له مسبقاً في خريطة الأذونات أنظر الى الصور في المشاركات السابقة'
Ap_CodePermissionProgrammingUser

وجميعها بلغة ال Ado

لمحة سريعة عن عمل هذه Function:

-تقوم بفتح الجدول TblSetPermission للقرائة فقط

-تقوم بعد السجلات الموجودة في هذه الجدول (يفيد في عرض حالة توزيع الأذونات على ال Status Bar ويلاحظ عندما يكون عدد الجدوال والاستعلامات المراد توزيع عليها الأذونات كبير)

-يمر على السجلات(أسماء الجداول) في الجدول TblSetPermission واحد تلو الأخر ويقوم بتوزيع الصلاحيات عليها

-يزيل الحالة من على Status Bar

-ويغلق الجدول TblSetPermission

ملاحظات هامة:

1-أقوم بإستخدام الدالة Ap_CodePermissionNoAccess قبل توزيع اي صلاحيات لأي مجموعة تمهيداً لإضافة الأذونات التي ارغب بها وللتأكد مائة با المائة من أن هذا الجدول لا يحتوي على اي صلاحية مثل يعني Refresh

2-في جميع الدالات أقوم بتوزيع الصلاحيات وأعيد تكرارها على هذه المجموعات

ِAdmins (مجموعة عمل)

Users (مجموعة عمل)

Admin (المستخدم الإفتراضي)

Current User (المستخدم الحالي)

وبالحالة هي بكون ضمنت 90% أنه شغلي صح

3-المستخدمين والمجموعات (كا أمثلة للتجريب)

'UserName            'Group                 'Password
'Abu Hadi            'Supervisor User       'Admin
'Abu Suliman         'Accounting User       'Admin
'Amjad Jamali        'Accounting User       'Admin
'Khuder AlRajbe      'Supervisor User       'Admin
'Mohammed Ali        'DataEntry User        'Admin
'Mohammed Taher      'Programmer User       'Admin
'Radhwan             'DataEntry User        'Admin
'Sahel Alareshi      'Programmer User       'Admin

واذا في حدا عنده تعليق أ فكرة جديدة على طريقتي الرجاء أفيدوني

شكراً :rolleyes:

يتبع

SecurityProjectV0.2.zip

تم تعديل هذه المشاركة بواسطة أمجد جمالي في 4 أبريل 2005 في 15:00

#13

يعطيك العافية اخي الفاضل

مع خالص التحيات ،،،

عبدالمانع

إنما الأمم الأخلاق ما بقيت ××× فإن هم ذهبت أخلاقهم ذهبوا ...
#14

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

نأمل المتابعة وفقك الله

#15

يعطيك العافية

في انتظار المزيد

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

#16

فتح الله عليك أخى الكريم

وفى انتظار المزيد ان شاء الله

#17

موضوع جدا شيق ومهم ... :rolleyes:

ونشكرك على هذه المبادرة

اخووووووك

#18

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

في المثال المرفق طريقة لإضافة القوائم للمجموعات والتحكم بها Enable Or Desableمن خلال جدول تم إعداده مسبقاً وليس من خلال الكود

طريقة العمل :

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

تحتاج تمرير 3 متغيرات لهذه الدالة وهي

أسم الجدول الذي سوف يتم قرائة منه الصلاحيات

اسم المجموعة

أسم الصلاحية (FieldName)

نوع البيانات التي سوف تعود بها الدالة هي إما True Or False

Public Function Ap_GetUserPrivilegeTrFa(StrTblName, StrGroupName, StrPrivilegeName As String) As Boolean

On Error GoTo Err_Ap_GetUserPrivilegeTrFa

'--Read Data Only--'
Dim RstCheckUserPrivilege As New ADODB.Recordset
RstCheckUserPrivilege.Open StrTblName, CurrentProject.Connection, adOpenStatic
RstCheckUserPrivilege.MoveFirst
RstCheckUserPrivilege.Find "GroupName Like '" & StrGroupName & "'"
Ap_GetUserPrivilegeTrFa = RstCheckUserPrivilege(StrPrivilegeName)
RstCheckUserPrivilege.Close

Exit_Ap_GetUserPrivilegeTrFa:
    Exit Function
    
Err_Ap_GetUserPrivilegeTrFa:

        DisplayMessageCritical "Found System Error:-" & vbCrLf & "" & vbCrLf & "Error Description: " & _
        Err.Description & "" & vbCrLf & "" & vbCrLf & "Error Number: " & Err.Number & "" & vbCrLf & "" & _
        vbCrLf & "Contact your system Administrator: " & Ap_GetDataBaseProperties("TblDatabaseProperties", "SystemAdministrator") & _
        "" & vbCrLf & "" & vbCrLf & "Full technical support information is available on our E-Mail:-" & _
        vbCrLf & "" & Ap_GetDataBaseProperties("TblDatabaseProperties", "SupportEmail") & "" & vbCrLf & _
        "" & vbCrLf & "Please don't hesitate to contact us.", "Error Message"
    
    Resume Exit_Ap_GetUserPrivilegeTrFa

End Function

هذا هو المثال للتجريب

تحياتي :fff:

SecurityProjectV0.3.zip

#19

شكرا لك

#20

مشكور على الشرح الجميل

#21

موضوع رائع جدا وكنت ابحث عنه

شاكر لك كثير الشكر اخوي امجد

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

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