قائمة قواعد البيانات > MS SQL

الامان فى MS SQL Server

الكاتب:


السلام عليكم
قررت كتابة هذا الموضوع بعد ان تكرر السؤال عن وجود مشاكل فى التعامل مع ال MS SQL Server من جانب المطورين و خصوصاً فى خطوة الاتصال بقاعدة البيانات و السبب هو جهل المطورين بالامن فى ال MS SQL Server
دعونا اولاً نحدد ان التعامل مع ال MS SQL Server ليس كالتعامل مع MS Access حيث انك فى تطبيقات الاكسس تقوم بارفاق قاعدة بياناتك إلى العميل و تحتاج لوجود محرك JET عنده لكى يعمل تطبيقك
اى انك تتعامل مع Single Tier Application حيث ان طبقة البيانات مع طبقة العرض مع طبقة ال BL فى اناء واحد و مما لا شك فيه ان لهذه الطريقة مساوئ و عيوب
اما التطبيقات التى تتعامل مع MS SQL Server هى تطبيقات من نوع Two Tier Application او n-Tier Applications فى هذا النوع من التطبيقات يتم فصل ال Data Layer عن ال Presentation Layer و ال Buisness Logic Layer

ماذا قصدت من وراء هذه المقدمة ؟
ما قصدته ان ابين ان التعامل مع تطبيقات ال MS SQL Server يتم استخدام سيرفر لقواعد البيانات و من ثم لزم على المطور ان يجعل برنامجه يتصل بقاعدة البيانات الموجوده على السيرفر (Data Layer)

سأتطرق فى حديثى لنقطتين الاولى هى انواع ال Authentication فى ال MS SQL Server و النقطة الثانية هى انشاء مستخدم جديد و اعطاؤة الصلاحيات

سأذكر هنا بعض المصطلحات التى نحتاج لان نعرفها اولاً
Authentication هى العمليه التى يتم فيها التاكد من صحة اسم المستخدم وكلمة المرور
اما ال Authorization فالمقصود بها الصلاحيات الممنوحه إليك
و بصوره ابسط افترض اننى عامل لديك فى المصنع فمن حقى ان ادخل المصنع و لكن لى صلاحيات لا يمكن تجاوزها
ال Roles مثل مجموعات المستخدمين بداخل اى دومين على ويندوز 2000 و هى تسمح لك بجمع مجموعة مستخدمين فى مجموعه واحده ثم يمكنك ان تطبق عليهم صلاحيات محدده على كل المجموعه
ال Rules هى كائن بقاعدة البيانات مرتبط باعمده او انواع بيانات جديده (قام بصنعها المطور ) يحدد قيم البيانات التى يمكن استقبالها فى العمود

الامن فى ال MS SQL Server

يوفر ال MS SQL Server نوعين من ال Authentication بداخله لكى ترتبط التطبيقات التى تعمل على الانظمة به
1 - النوع الاول يعمل مع انظمة مايكروسوفت NT Family مثل Windows NT ,2K,XP And Later و هو يسمى Windows Authentication
2 - النوع الثانى يعمل مع انظمة 9X مثل Windows 98 And Windows ME و هو يسمى SQL Server Authentication او Mixed Mode Authentication

النوع الاول Windows Authentication

هذا النوع كما ذكرنا يستخدم عندما يتصل مستخدموا التطبيق بقاعدة البيانات على السيرفر و يعمل هؤلاء المستخدمين بانظمة NT Family
اى الان انت كمطور قمت ببناء تطبيق يستخدم MS SQL Server و قمت باسترجاع نسخة احتياطية من قاعدة البيانات على السيرفر او قمت بعمل Attach لملفى ال MDF و ال LDF المهم الان فى تطبيقك الموجود لدى العملاء يجب ان تتأكد انك تستخدم Windows Authentication تم تحديده فى ال Connection String لديك
يتم استخدام هذا النوع من الامان فى تطبيقات المؤسسات الداخلية التى تعمل من خلال الشبكة الداخلية لها Intranet

النوع الثانى Mixed Mode Authentication
هذا النوع من الامن يستخدم مع تطبيقات الويب و مع مستخدموا الانظمة التى تعمل باستخدام Windows 9X لكى يستطيعوا استخدام تطبيقك و الاتصال سيرفر قاعدة البيانات

أى انواع الامن افضل ؟

هذا يعتمد على طبيعة العمل الذى تقوم به فمثلاً فى تطبيقات المؤسسات الداخلية انا افضل استخدام النوع الاول Windows Authentication الذى يستخدم بروتوكول الشتفير Kerberos و هنا يتم تشفير الاكونت بين العميل و بين السيرفر بالاضافة ايضاً لامكانية متابعة المستخدمين فى هذا النوع من الامن

فى تطبيقات الويب و هى الاكثرية نستخدم Mixed Mode (الذى يستخدم مزيجاً من Windows Authentication and SQL Server Authentication). و هنا تنتقل حسابات الدخول فى صيغة غير مشفرة Plain Text يمكن التقاطها بال Sniffers
و لكن هذه الطريقة هى الامثل فى بيئة تعدد المستخدمين بانظمة هجينة غير انظمة مايكروسوفت و يكون بالامكان استخدام بروتوكول SSL مع هذا النوع من التطبيقات عند العمل كتطبيقات ويب

إنشاء مستخدم جديد للتعامل مع قاعدة البيانات
هذا الجزء ساناقش فيه مفهوم ال Roles و انشاء المستخدمين فى ال MS SQL Seerver و بعد ذلك كيفية اعطاء الصلاحيات على قاعدة البيانات

ما هى ال Roles ؟

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

تنقسم ال Roles فى ال MS SQL Server لنوعين من ال Roles
الاول يسمى Server Roles و من الواضح انها تحتوى على مجموعات خاصة للتعامل مع السيرفر و اجراء اى عملية على السيرفر و تضمن المجموعات التالية
sysadmin : يمكن لاعضاء هذه المجمعة التعامل مع اى شئ خاص بالسيرفر
serveradmin : الموجودين بهذه المجموعة لهم الحق فى تغيير إعدادات السيرفر او اغلاقه
setupadmin : اعضاء هذه المجمعة لهم الحق فى التعامل مع اعدادات ال Replications و تنزيل او استخدام ال Extended SP
securityadmin : اعضاء هذه المجموعة لهم الحق فى تغيير و انشاء ال Logins و التعامل مع الصلاحيات
dbcreator : لهم صلاحية انشاء و تعديل قواعد البيانات على السيرفر
diskadmin :إمكانية التعامل مع الملفات على السيرفر
bulkadmin : يسمح لاعضاء هذه المجموعة باستخدام ال Bulk Insert

الثانى يسمى DataBase Role و تحتوى على المجموعات التى يمكن ان تتعامل مع قواعد البيانات على السيرفر

إنشاء Login جديد

سنقوم الان و اولاً بتعديل نمط السيكيورتى فى ال MS SQL Server كما ذكرنا فى انماط ال Authentication على حسب طبيعة عملك



الان سنبدأ فى التعامل مع انشاء مستخدم من خيارات ال Security فى شجرة السيرفر اضغط بالزر الايمن و اختر New Login تظهر لك شاشة شبيهة بالشاشة التالية غير فيها ما يلزمك



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

للتوضيح فقط هنا كل هذا من اختصاص ال DBA او ال MS SQL Server Developer الذى غالباً ما يكون له دراية لا بأس بها بال Administration
و عن حقيقة انا لم اقابل اى مبرمج يفهم فى التعامل مع ال MS SQL Server و بالرغم من ذلك تجده مصراً على انه يفهم بدون ان يترك العمل للمتخصصين و هذا شئ طبيعى فى الاعمال الفرديه او الصغيرة و لا يحدث اطلاقاً فى الاعمال المتوسطه او الكبيرة او داخل الشركات

دعونا نرجع لموضوعنا اه كنت اتحدث عن الصلاحيات هل تتذكرون ال Roles انا لم اتعرض لل DataBase Roles و الان ها هو موضعها
ال DataBase Roles يمكننا ان نقسمها ل
Predefined database roles او ما تسمى Fixed Roles - و هناك User Defined Role
دعونا مع النوع الاول
و هو يحتوى على المجمعات التالية
db_owner : انا اطلق على هذه المجموعة The Little Admin Role فهى تعتبر بمثابة مدير صغير لقاعدة البيانات
الاعضاء بهذه المجموعة لهم صلاحية التعامل من انشاء و تغيير اى كائن موجود بقاعدة البيانات و حتى تعديل صلاحيات و اعطاء صلاحيات جديدة لمستخدمين قاعدة البيانات

db_accessadmin : اعضاء هذه المجموعة بامكانهم التحكم فى إضافة او ازالة اى مستخدم لقاعدة بيانات سواء يستخدم Windows Authentication او Mixed Mode Authentcation

db_datareader : اعضاء هذه المجموعة لهم الحق فى استخدام جملة ال Select فقط من دون ال Insert,Update,Delete

db_datawriter : اعضاء هذه المجموعة لهم حق استخدام فى استخدام Insert,Update,Delete ما عدا ال Select

db_ddladmin : اعضاء هذه المجموعة لهم الحق فى إنشاء و تعديل و حذف اى كائن بقاعدة البيانات

db_securityadmin : اعضاء هذه المجموعة لهم الحق فى التعامل مع الصلاحيات و ال Roles داخل قاعدة البيانات

db_backupoperator : اعضاء هذه المجموعة لهم الحق فى اجراء عملية النسخ الاحتياطى لقاعدة البيانات

db_denydatareader : اعضاء هذه المجموعة ليس لهم الحق فى استخدام عبارة ال Select و لا يحق لهم انشاء او حذف اى جدول موجود بقاعدة البيانات و لكن يمكنهم تعديل ال Table Schema

db_denydatawriter : اعضاء هذه المجموعة لا يحق لهم استخدام عبارات ال Insert او ال Update او ال Delete

public : هذه المجمعة ستجدها فى كل قاعدة بيانات و منها يمكن تطبيق سياسة واحدة على كل المشتركين فى هذه المجموعة

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



الان هذا ال Login ستستخدمه فى الاتصال بقاعدة البيانات و اجراء العمليات عليها دعونا ننهى عملنا باعطاء الصلاحيات Permissions
من ال Users الموجوده داخل قاعدة البيانات سيظهر لك اسم ال Login الذى قمت بانشائه اضغط بالزر الايمن ستظهر لك شاشة توضح ال Roles الموجود بها هذا المستخدم الان اضغط على زر ال Permissions كما هو موضح يمكنك ان تعطى الصلاحية المناسبة لهذا المستخدم على قاعدة البيانات ككل او لكائنات معينة و اعتقد ان الصورة تشرح نفسها



الان انت انتهيت من انشاء مستخدم و اعطائه صلاحيات تتعامل بها من داخل الكود

تنبيه اخير

فى حال استخدمت ال Trusted Connection بداخل ال Code فانت تستخدم ال Windows Authentocation و تاكد ان ال MS SQL Server يعمل بها
فى حال استخدمت اسم مستخدم و كلمة مرور فانت تستخدم Mixed Mode Authentication و تأكد ان ال MS SQL Server يعمل فى هذا ال Mode و إلا ستظهر رسالة Access Denied او SQL Server Does Not Exist
ايضاً تأكد من انك قمت بانشاء مستخدم كما هو موضح

الحمد لله انتهيت من المقالة الاولى فى مجموعة مقالات تهم المطورين الذين يستخدمون MS SQL Server ك Back End