محمد رضى

بحث : كيفية تحديد صلاحيات مستخدمي Sql Server و البرامج المتصلة به. الجزء الثاني

8 ردود في هذا الموضوع

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

الجزء الثاني : نظام الحماية SQL Server Authentification

في هذا الجزء الثاني من البحث, سنتحدث إن شاء الله, عن كيفية تحديد صلاحيات مستخدمي برامجنا عبر تحديد صلاحياتهم كمستخدمي SQL Server عبر نظام الحماية SQL Server Authentification. العمل بهذا النظام يحيلنا مباشرة على SQL Server من دون ضرورة المرور عبر نظام حماية Windows. العمل بهذا النظام يمكن العديد من المستخدمين من الربط بـ SQL Server من حساب ويندوز واحد عكس نظام حماية Windows Authentification الذي يوجب الخروج من حساب ويندوز و الدخول إلى آخر خصوصا إذا كان عدد من المستخدمين يعملون على نفس الحاسب. المهم, لكل نوع طريقة خاصة في العمل يجب أن نأخذها بعين الاعتبار خلال مرحلة تصميم البرامج المرتبطة بقواعد بيانات SQL Server. و كما تحدثنا في الجزء السابق من هذا البحث عن نظام الحماية Windows Authentification دعونا نبدأ الآن في التحدث عن مراحل زيادة مستخدم عبر نظام الحماية SQL Server Authentification.

كي نستطيع الربط مباشرة مع SQL Server من دون المرور عبر حساب ويندوز, نحتاج إلى تفعيل قابلية السرفر على الربط بكلتا الطريقتين لأنه عند تثبيت SQL Server تكون قابلية السرفر للربط بنظام الحماية SQL Server Authentification غير مفعلة. ولتفعيلها نربط الإتصال بالسيرفر عبر حساب مدير النظام ثم ننقر بالزر الأيمن للفأرة على مجلد السيرفر و نختار Properties من القائمة التي ستظهر كما هو مبين في الصورة أذناه.

post-207152-1251483634_thumb.jpg

بعد ذلك و على نافذة خصائص SQL Server التي ستظهر, نقوم بالنقر على العنصر Security من لائحة الصفحات على يسار النموذج. بعدها نحدد خانة الاختيار SQL Server and Windows Authentification mode. ننقر على الزر OK لإتمام العملية.

post-207152-1251483693_thumb.jpg

بعد نجاح عملية تهيئة SQL Server لقبول ربط الاتصال به عبر نظامي الحماية SQL Server و Windows, قدي يحتاج السيرفر المشتغل حاليا إلى إعادة تشغيل كي يتم تفعيل عملية التهيئة التي قمنا بها. لإعادة تشغيل السيرفر, نقوم بتشغيل برنامج Services الذي يمكننا من إيقاف, تشغيل و إعادة تشغيل Windows Services. لتشغيل هذا البرنامج نقوم بالضغط على الزرين Windows+R لإظهار نافذة تشغيل البرامج Run حيث سندخل اسم الملف التنفيذي Services.msc ثم نضغط على الزر Enter. عندما تظهر لنا نافذة البرنامج كما هي مبينة على الصورة أذناه, نضغط بالتتابع على الأزرار s و q حتى يتم تحديد SQL Server (Server instance name) على اللائحة ثم ننقر على الرابط Restart على يسار لائحة Windows Services.

post-207152-1251483733_thumb.jpg

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

post-207152-1251483765_thumb.jpg

زيادة مستخدم جديد في نظام حماية SQL Server شبيه إلى حد ما بالنظام الذي تحدثنا عنه في الجزء الأول من هذا البحث. سنبدأ كما السابق بالنقر على علامة زائد بجانب المجلد الذي يحمل اسم السيرفر لاستعراض عناصره. بعده, ننقر على علامة زائد بجانب مجلد Security لاستعراض عناصره ثم ننقر بزر الفأرة الأيمن على مجلد Connections… و نختار New connection… من القائمة التي ستظهر.

post-207152-1251483803_thumb.jpg

على النافذة التي ستظهر, سننشئ المستخدم الجديد مع معلومات اتصاله بالسيرفر. على مربع نص Login سندخل اسم المستخدم أو اسم الاتصال ثم نحدد خانة الاختيار SQL Server Authentification, تحديد هذه الخانة سيقوم بتنشيط المربعين الذين من خلالهما سنحدد كلمة المرور التي سيستعملها المستخدم الجديد للاتصال بـ SQL Server. لم يحن الوقت بعد للنقر على الزر OK.

post-207152-1251483846_thumb.jpg

بعد ذلك, سنختار من لائحة اختيار الصفحات على يسار النافذة, سنختار Server roles حيث يمكن لنا تحديد دور أو أدوار المستخدم على السيرفر. بالنسبة لمستخدم عادي نقوم بتحديد خانة الاختيار public حتى نتمكن من تحديد صلاحيات المستخدم على كل عنصر و جدول على حدى كما رأينا في الجزء الأول من هذا البحث. اختيار دور من هذه الأدوار يعطي للمستخدم صلاحيات على كل العناصر وهذا يكون له دور أساسي عند إعطاء الصلاحيات لمديري و مشرفي النظام و هو أمر خارج عن نطاق هذا البحث.

post-207152-1251484075_thumb.jpg

بعد ذلك و قبل النقر على الزر OK, نختار User mappings من على لائحة الصفحات يسار النافذة. يمكن لنا هنا تحديد أدوار المستخدم على قواعد البيانات الموجودة سلفا و ذلك بتحديد خانة الاختيار بجانب كل قاعدة بيانات. هذه الشاشة ستوفر علينا الوقت في حالة ما إذا أردنا أعطاء المستخدم صلاحيات على عدد من قواعد البيانات. يمكننا كذلك تحديد أدوار المستخدم على كل قاعدة بيانات مرتبطة بالسيرفر. و أخيرا ننقر على الزر OK لإتمام عملية زيادة المستخدم الجديد.

post-207152-1251484140_thumb.jpg

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

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

في الجزء القادم, سنقوم بتحرير التطبيق المرفق مع الأجزاء السابقة ليتلاءم و نظام حماية SQL Server Authentification.

آسف على التأخير في استكمال هذا البحث و حتى الجزء القادم منه, لكم...

تحياتي...

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكرا جزيلا أخ محمد رضى

ولكن لدي استفسار بسيط ...

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

الان كيف استطيع الربط الان بين هؤلاء المستخدمين والبرنامج الخارجي ؟؟؟

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

بصلاحيات مختلفة ... فكيف يكون شكل ال connection string في مثل هذه الحالة ...

وشكراااا ...

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

نعم أخي dr.misho, أسئلتك هذه ستكون, إن شاء الله تعالى, موضوع الجزء القادم من هذا البحث.

تحياتي...

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكرا جزيلا أخي محمد رضى

ووفقك الله .....

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

اخي محمد رضى لدي سؤال , الاول انه في حالة يريد الشخص الدخول على نظام SQL Server Authentification. من شاشة Login

فانه يجب ان يضع Login Name & Password

853826272.jpg

ولكن في حالة Windows Authentification لا يطلب اي شيئ , يدخل بدون اي حسيب و لا أي رقيب , أنا قصدي ليس البرنامج و لا حتى

الـ Connection String إنما واجهة Microsoft SQL Server Management Studio

بهذا الشيئ , يمكن لاي مستخدم ان ينزل الـ Microsoft SQL Server على جهازه و يقوم بفتح SQL Management Studio

و يعبث في البيانات Manual ,

فكيف يمكن لي ان امنعه من الدخول ؟ بلا حسيب و لا رقب كما يفعل في حال دخوله Windows Authentification

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

post-207152-1251483803.jpg

و بانتظار تكملة الدروس , شكر لك اخي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

شكرا لكم أخوي عساف و ماتريكس.نت على تفاعلكم معي في هذا الموضوع.

في هذا الجزء, سنتكلم إن شاء الله عن خطوات تحرير البرنامج المرفق مع هذا البحث لكي يصبح قادرا على العمل مع نظام حماية SQL Server Authentification كما كان يعمل مع Windows Authentification. صراحة, ليست هناك تغييرات جذرية, فقط تغيير جملة الربط Connection String و زيادة النافذة Login التي تتلقى اسم و كلمة المرور الضروريان لربط الاتصال بـ SQL Server.

لعدم الإطالة في هذا الجزء, لن نتطرق إلى المجموعات و الأدوار التي ينتمي إليها المستخدم و التي تعطيه صلاحيات على مستوى السيرفر أو على مستوى قاعدة البيانات. هذا الموضوع سنتطرق إليه إن شاء الله في جزء لاحق. البرنامج الذي سنخرج به من هذا الجزء يحتاج من مدير النظام أن يحدد الصلاحيات على مستوى الجدول UserInfo و حتى مدير النظام يحتاج إلى تحديد صلاحياته كذلك على الجدول المذكور ليعمل بشكل صحيح. و لأن قراءة صلاحيات المستخدم تبدأ من المجموعة التي ينتمي إليها مرورا بأدواره على السيرفر و أدواره على قاعدة البيانات حتى الصلاحيات على مستوى السيرفر ثم قاعدة البيانات و الوصول إلى الصلاحيات على مستوى عناصر قاعدة البيانات فسيكون من الصعب فهم هذا الجزء ولهذا سيقتصر على الصلاحيات على مستوى عناصر قاعدة البيانات و في حالتنا هذه سيقتصر فقط على صلاحيات المستخدم على الجدول UserInfo. فمثلا و بشكل موجز, لنفترض أن للمستخدم الدورين db_datareader و db_datawriter على مستوى قاعدة البيانات. زيادة الصلاحيات على مستوى الجداول أو حذفها لا يغير من الأمر شيئا. المستخدم سيظل قادرا على قراءة و كتابة البيانات على الجداول على مستوى قاعدة البيانات. و في نفس الوقت و مع وجود الدورين db_datareader و db_datawriter يمكننا منع المستخدم من قراءة أو كتابة البيانات على عنصر من عناصر قاعدة البيانات و ذلك برفض الصلاحية على نافذة تحديد صلاحيات المستخدم كما رأينا ذلك في الجزء الأول من هذا البحث.

عملية تحرير البرنامج للعمل على نظام حماية SQL Server Authentification تبدأ من جملة الربط. سنستعمل جملة الربط التالية :

Persist Security Info=False;User ID=#ID#;Initial Catalog=example1;Data Source=.\SQLEXPRESS;Password=#PSWD#

ماهي محتويات جملة الربط التي سنستعمل؟

Persist Security Info=False;

لحماية المعلومات الحساسة. حيث لو شغلتم الكود جملة جملة, ستلاحظون أنه بمجرد ربط الإتصال بـ SQL Server ستختفي كلمة المرور من جملة الربط على الكائن العضو SqlConnection.ConnectionString.

User ID=#ID#;

اسم المستخدم أو اسم ربط الاتصال بـ SQL Server. الكلمة #ID# تعتبر بارامتر سنستعمل الدالة Replace لتغييره باسم المستخدم الحقيقي وقت ربط الاتصال بـ SQL Server.

Password=#PSWD#

كلمة مرور المستخدم للاتصال بـ SQL Server. الكلمة #PSWD# تعتبر بارامتر سنستعمل الدالة Replace لتغييره بكلمة المرور الحقيقية وقت ربط الاتصال بـ SQL Server.

ثاني شيء سنحتاج للقيام به. زيادة نموذج سيلعب دور نافذة Login لبرنامجنا. قبل ظهور النافذة الرئيسية, ستظهر نافذة Login و ستنتظر من المستخدم إدخال اسم الاتصال و كلمة المرور. سنزيد الكود التالي في أول دالة الحدث Load للنموذج الرئيسي :

		  ' نافذة معلومات ربط الأتصال
Dim lf As New LoginForm()
If lf.ShowDialog(Me) = Windows.Forms.DialogResult.Cancel Then
Application.Exit()
Return
End If

ثالث شيء سنحتاج للقيام به و هو تمرير جملة الربط الصحيحة إلى الكائنات TableAdapterManager و UserInfoTableAdapter حتى لا تستعمل جملة الربط المسجلة على Settings و التي تحتاج إلى تغيير البارامترات #ID# و #PSWD#.

		  TableAdapterManager.Connection = New SqlConnection(My.Settings.example1ConnectionString.Replace("#ID#", lf.LoginTextBox.Text).Replace("#PSWD#", lf.PasswordTextBox.Text))
UserInfoTableAdapter.Connection = New SqlConnection(TableAdapterManager.Connection.ConnectionString)

هذا كل شيء. الأمر ليس بالتعقيد الذي يظنه الكثير. الاختلاف فقط في طريقة الربط بـ SQL Server عبر نظام حماية SQL Server Authentification حيث سنحتاج لجملة ربط بها اسم الاتصال و كلمة المرور التي سيدخلهما المستخدم وقت تشغيل البرنامج عن طريق نافذة Login. حيث أن الكائنات التي أنشأها VB IDE للوصول إلى البيانات تأخذ جملة الربط أوتوماتيكيا من My.Settings.example1ConnectionString التي تم تحديد محتواها على الصفحة Settings على نافذة خصائص المشروع, ستحتاج إلى تصحيح جملة الربط بالكائنين TableAdapterManager و UserInfoTableAdapter قبل القيام بعملهما كما رأينا ذلك في الخطوة الثالثة من تحرير البرنامج. أما طريقة الوصول إلى البيانات على القاعدة فهي الطريقة نفسها لا يتغير شيء.

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

في الجزء القادم إن شاء الله, سنتطرق إلى موضوع قراءة صلاحيات المستخدم من خلال التعرف إلى المجموعات التي ينتمي إليها و الأدوار التي يلعبها على مستوى السيرفر و/أو قاعدة البيانات.

في الملف المرفق ستجدون مشروع البرنامج بعد تحريره للعمل مع نظام حماية SQL Server Authentification.

تحياتي...

example1.rar

تم تعديل بواسطه محمد رضى
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكرااااااااااااا الله يعطيك العافيه وسلامه

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .