كيفية استخدام أدوار التطبيق مع مشاريع Access و SQL Server 2000 Desktop Edition

خيارات متقدمة: يتطلب ترميز الخبير إمكانية التشغيل المتداخل ومهارات متعددة.

تنطبق هذه المقالة فقط على مشروع Microsoft Access (.adp).


للحصول على إصدار Microsoft Access 2000 من هذه المقالة، راجع
318816 .

ملخص

يشرح هذا المقال حلول استخدام أدوار Microsoft SQL Server التطبيق في مشروع Microsoft Access (ADP) والقيود القدرات.

مزيد من المعلومات

في SQL Server، يمكنك إنشاء أدوار قاعدة البيانات لتسهيل إدارة الأذونات في قاعدة بيانات. بدلاً من منح الأذونات الفردية لكل مستخدم بشكل منفصل، يمكنك تجميع المستخدمين الذين لديهم نفس الاحتياجات إذن بجعلها أعضاء نفس دور قاعدة البيانات العادية، ثم تعيين أذونات إلى دور قاعدة البيانات نفسها. إلا إذا إذن معين بوضوح رفض في مكان آخر، ستكتسب المستخدمين الأعضاء الأذونات الممنوحة لدور قاعدة البيانات تلك.

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

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

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

إنشاء دور تطبيق ما

مشاريع Microsoft Access لم يتم أي أدوات تصميم مرئية لإنشاء كائنات الأمان ملقم SQL مثل أدوار التطبيق. توصي Microsoft باستخدام أدوات العميل التي تم تضمينها في النسخة العادية من SQL Server أو Microsoft Office XP المطور لإنشاء أدوار التطبيق وتعيين الأذونات. ومع ذلك، يمكنك لا يزال إنشاء دور التطبيق ومنحة الأذونات الضرورية برمجياً باستخدام SQL للعمليات (T-SQL) من ADP. على الرغم من إجراء مناقشة كاملة للأمان ملقم SQL خارج نطاق هذه المقالة إضافية يمكن العثور على معلومات في كتب SQL Server عبر إنترنت تظهر الخطوات التالية كيفية إنشاء بدور تطبيق برمجياً ومنح دور جديد حدد الأذونات في جدول:
  1. ابدأ تشغيل Access.
  2. فتح مشروع Access نموذج Northwind.
  3. في الإطار "قاعدة بيانات"، انقر فوق الوحدات النمطية تحت كائناتومن ثم انقر فوق جديد لفتح وحدة نمطية جديدة في بيئة Visual Basic.

    ملاحظة: في Access 2007، انقر فوق الوحدة النمطية في المجموعة الأخرى ضمن علامة التبويب إنشاء .
  4. اكتب أو الصق التعليمة البرمجية التالية في الوحدة النمطية الجديدة:
    Public Function AddNewAppRole(RoleName As String, PW As String) As BooleanOn Error GoTo EH:
    If CurrentProject.IsConnected Then
    Dim sTSQL As String
    'Create the command
    sTSQL = "EXEC sp_addapprole '" & RoleName & "','" & PW & "'"
    'Send the command
    Application.CurrentProject.Connection.Execute sTSQL
    AddNewAppRole = True
    Else
    AddNewAppRole = False
    End If
    Exit Function
    EH:
    MsgBox Err.Number & ": " & Err.Description, vbCritical
    AddNewAppRole = False
    End Function

  5. حفظ الوحدة النمطية ثم قم بإنهاء بيئة Visual Basic.
  6. إنشاء نسخة من جدول " العملاء " ومن ثم حفظه تنيوتابل. للقيام بذلك، اتبع الخطوات التالية:
    1. في الإطار "قاعدة بيانات"، انقر نقراً مزدوجاً فوق جدول " العملاء "، وثم انقر فوق حفظ باسم القائمة المختصرة.

      ملاحظة: في Access 2007، انقر فوق جدول " العملاء " في "جزء التنقل"، انقر فوق زر Microsoft Office، أشر إلى حفظ باسم، وثم انقر فوق حفظ الكائن باسم.
    2. في مربع الحوار حفظ باسم ، اكتب tNewTable في المربع حفظ جدول "العملاء" ، ومن ثم انقر فوق موافق.
  7. في الإطار "قاعدة بيانات"، انقر فوق النماذج ضمن الكائناتانقر فوق جديدومن ثم انقر فوق موافق لفتح نموذج جديد في طريقة عرض التصميم.

    ملاحظة: في Access 2007، انقر فوق تصميم نموذج في المجموعة نماذج ضمن علامة التبويب إنشاء .
  8. إضافة زر أمر إلى نموذج جديد.
  9. تعيين خاصية " عند _ النقر " لزر أمر جديد إلى إجراء الحدث التالي:
    On Error GoTo EH:'Code only works if ADP is connected.
    If CurrentProject.IsConnected Then
    Dim bNewAppRole As Boolean, strTSQL As String
    Dim strRoleName As String, strPW As String
    strRoleName = "AppRoleName"
    strPW = "Password"
    'Call function to create app role.
    bNewAppRole = AddNewAppRole(strRoleName, strPW)
    'Test to see if it failed.
    If bNewAppRole = False Then
    Exit Sub
    End If
    MsgBox "New Application role '" & strRoleName & "' created", vbInformation
    'Create command to grant permissions.
    strTSQL = "Grant Select on tNewTable to " & strRoleName
    'Send the command.
    Application.CurrentProject.Connection.Execute strTSQL
    MsgBox "Select permissions granted on tNewTable for " & strRoleName
    Else
    MsgBox "ADP must be connected to SQL Server"
    End If
    Exit Sub
    EH:
    MsgBox Err.Number & ": " & Err.Description, vbCritical

  10. إغلاق بيئة Visual Basic للعودة إلى النموذج.
  11. قم بحفظ النموذج ومن ثم التبديل النموذج إلى طريقة عرض "النموذج".
  12. انقر فوق زر الأمر لتشغيل التعليمات البرمجية الأساسية.

    لاحظ ظهور مربعي رسالة للإشارة إلى النجاح. تلقي أحد بعد إنشاء دور التطبيق، ويمنحون ثانية واحدة بعد أذونات دور جديد تنيوتابل.

تنفيذ دور التطبيق

يتم تنحية الرئيسي عند استخدام أدوار التطبيق في مشاريع Access يستخدم Access ثلاثة اتصالات ب SQL Server لمعالجة المهام المختلفة. وبشكل مثالي، لتطبيق دور تطبيق ما على المشروع بأكمله، يجب عليك تنفيذ sp_setapprole في سياق كافة الاتصالات الثلاثة. معالجة بواسطة اتصال كل الكائنات كما يلي:

  1. يستخدم لتحديد الكائنات التي تظهر في إطار قاعدة البيانات وقاعدة البيانات المتنوعة المهام الإدارية.

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

    تستخدم للحصول على مصادر السجلات لمربعات التحرير والسرد ومربعات القائمة والتقارير.
  2. يستخدم لفتح الجداول وطرق العرض، الإجراءات المخزنة، وظائف ومصادر السجلات للنماذج والتقارير الفرعية (ولكن ليس للتقرير الرئيسي).

    تستخدم للحصول على مصادر السجلات لمربعات التحرير والسرد ومربعات القائمة والتقارير.
  3. تستخدم للحصول على مصادر السجلات لمربعات التحرير والسرد ومربعات القائمة والتقارير.

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

استخدم الخطوات التالية مشروع Access نموذج Northwind لشرح كيفية تطبيق دور تطبيق ما مقابل اتصالات #2 و #3:

  1. في الإطار "قاعدة بيانات"، انقر فوق النماذج ضمن الكائناتانقر فوق جديدومن ثم انقر فوق موافق لفتح نموذج جديد في طريقة عرض التصميم.

    ملاحظة: في Access 2007، انقر فوق تصميم نموذج في المجموعة نماذج ضمن علامة التبويب إنشاء .
  2. إضافة مربع قائمة إلى النموذج التي تم إنشاؤها حديثا، ثم قم بتعيين اسم الخاصية من مربع القائمة إلى lst_AppRole.
  3. إضافة زر أمر إلى النموذج.
  4. تعيين خاصية " عند _ النقر " لزر أمر جديد إلى إجراء الحدث التالي:
    On Error GoTo EH    'This avoids a message that no records were returned.
    DoCmd.SetWarnings False
    Dim TSQL
    TSQL = "EXEC sp_setapprole 'AppRoleName', {Encrypt N 'Password'}, 'odbc'"
    'This sets the app role on Connection #2.
    Application.CurrentProject.Connection.Execute TSQL
    'This sets the app role on Connection #3.
    lst_approle.RowSource = TSQL
    lst_approle.Requery
    DoCmd.SetWarnings True
    MsgBox "The application Role is now in effect.", vbInformation
    Exit Sub
    EH:
    MsgBox Err.Number & ": " & Err.Description, vbCritical

  5. إغلاق بيئة Visual Basic للعودة إلى النموذج.
  6. قم بحفظ النموذج ومن ثم التبديل النموذج إلى طريقةعرض "النموذج".
  7. انقر فوق زر الأمر لتشغيل التعليمات البرمجية الأساسية.

    لاحظ ظهور مربع رسالة تشير إلى نجاح.
  8. في الإطار "قاعدة بيانات"، انقر فوق جداول أسفل كائنات، وقم بفتح الجدول تنيوتابل .

    ملاحظة: في Access 2007، انقر نقراً مزدوجاً فوق الجدول تنيوتابل في "جزء التنقل".
  9. تعديل سجل ومحاولة حفظ التغييرات.
لاحظ أنه أثناء محاولة تنفيذ التغييرات الخاصة بك، تظهر رسالة خطأ حول عدم وجود أذونات كافية. يحدث هذا بسبب قدم دور التطبيق الجديد حدد الأذونات في الجدول تنيوتابل ، لكن ليس
تحديث الإذن.

وفقا للتصميم، يعرض Access فقط الكائنات في إطار قاعدة البيانات التي قد حدد على الأقل المستخدم أو أذونات التنفيذ. يستخدم access اتصال #1 تحديد الكائنات التي لدى مستخدم أذونات. بعد تطبيق دور التطبيق لاتصالات #2 و #3، إطار قاعدة البيانات لا يزال يظهر نفس الكائنات التي فعلت من قبل، حتى ولو قد يعد لديك الأذونات لكافة كائنات المستخدم، أو قد يكون لديك أذونات للمزيد من الكائنات التي لا تظهر. ينتج عن ذلك سلوك غير متوقع عند استخدام إطار قاعدة البيانات.

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

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

اعتبارات الأمان والقيود الأخرى

سوبفورمس لا يعمل

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

تقارير لا يعمل

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

للتغلب على هذه المشكلة، دائماً استخدام عبارات sql كمصدر السجل للنماذج والتقارير. على سبيل المثال، استخدم "تحديد * من فيونامي" بدلاً من مجرد "فيونامي" أو "Exec ستوريدبروسيدورينامي" بدلاً من مجرد "ستوريدبروسيدورينامي". بهذه الطريقة، الوصول إلى تمرير عبارات SQL للعمليات مباشرة إلى SQL Server واسترداد البيانات استناداً إلى دور تطبيق الأذونات.

دور "قاعدة البيانات العامة"

تكتسب بدور تطبيق الأذونات الخاصة بدور قاعدة البيانات العامة. بشكل افتراضي في NorthwindCS، دور العامة أذونات كاملة لمعظم الكائنات. لذلك، بدور تطبيق غير فعال بشكل عام. عند إنشاء جدول tNewTable في قسم "إنشاء دور التطبيق"، دور العامة لم تمنح الإذن إلى الجدول، والتي شاهدتها تأثيرات سياق الأمان دور التطبيق لاحقاً في هذا الجدول. ومع ذلك، جداول أخرى قد لا تظهر أي اختلاف ضمن دور التطبيق لأن أذونات الدور العام لهذه الكائنات.

أمان VBA

نظراً لتضمين كلمة المرور لدور التطبيق إلى التطبيق الذي يتم استدعائه، ستكون خبرة مستخدم قادراً على قراءة اسم دور التطبيق وكلمة المرور من التعليمات البرمجية للمصدر، وثم استخدام هذه المعلومات للوصول إلى SQL Server من تطبيق آخر. لذلك، أنها لفكرة جيدة أن تجمع في ADP في ملف ADE حيث أنه لا يتم عرض التعليمات البرمجية المصدر. أدنى، فرض كلمة مرور على مشروع VBA.

المراجع

للحصول على معلومات إضافية حول إصدار Microsoft Access 2000 من هذه المقالة، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":
318816 ACC2000: كيفية استخدام أدوار التطبيق مع مشاريع Access و SQL Server 2000 الإصدار Desktop Engine (MSDE 2000)
لمزيد من المعلومات حول منح، راجع كتب SQL Server عبر إنترنت. كتب SQL Server الفورية متاحة في موقع Microsoft التالي على الويب:
http://www.microsoft.com/sql/techinfo/productdoc/2000/default.asp
خصائص

رقم الموضوع: 308312 - آخر مراجعة: 18‏/01‏/2017 - المراجعة: 1

تعليقات