التأمين في سيكويل سيرفر: التوثيق 2 – المستخدمين في سيكويل سيرفر

This article is available in English too, check it out here.

اقرأ المزيد عن تأمين سيكويل سيرفر هنا.

هذه السلسلة

من هذه السلسلة:

المحتويات

محتويات هذا الموضوع:

  • هذه السلسلة
  • المحتويات
  • نظرة خاطفة
  • مقدمة
  • الدخول إلى سيكويل سيرفر
    • استخدام الفيجوال ستوديو
    • استخدام لوحة التحكم
    • استخدام الكود
  • معرفة المستخدمين المسجلين
    • استخدام لوحة التحكم
    • استخدام جمل T-SQL
    • استخدام الكود
  • خاتمة
  • ماذا بعد

نظرة خاطفة

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

مقدمة

نتعلم اليوم آلية الدخول إلى سيكويل سيرفر وفكرة المستخدمين. نتعلم أنواع التوثيق في سيكويل سيرفر. نتعلم كيفية استخدام أكثر من مستخدم للدخول إلى سيكويل سيرفر وأيضا كيفية سرد جميع المستخدمين المسجلين.

بنهاية هذا الدرس تكون جاهزا لقراءة الدروس القادمة والتي تتكلم عن إدارة ومعالجة معالجة المستخدمين، إضافة مستخدمين جدد، تعديل أو حذف مستخدمين موجودين.

الدخول إلى سيكويل سيرفر

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

استخدام الفيجوال ستوديو

إذا كانت لديك نسخة العميل (نقصد بها الإكسبريس Express) من سيكويل سيرفر أو كنت تفضل استخدام الفيجوال ستوديو بشكل عام فيمكنك ملاحظة عملية التوثيق أثناء محاولتك الاتصال Connect مع قاعدة بيانات سيكويل سيرفر أو محاولتك إنشاء قاعدة بيانات جديدة ويتم ذلك عن طريق Server Explorer والذي تظهره عن طريق القائمة Tools > Connect to Database. عند محاولتك لعمل اتصال مع قاعدة تظهر شاشة شبيهة بالتالية شكل 1.

شكل 1 - فيجوال ستوديو - إنشاء اتصال

شكل 1 - فيجوال ستوديو - إنشاء اتصال

هنا نلاحظ أنك تقوم باختيار نوع التوثيق الذي تريده من خلال خيارات Log on to server. تستطيع الاختيار بين توثيق الويندوز (والذي يتم بشكل صحيح إذا كان مستخدم الويندوز هذا مسجل في سيكويل سيرفر) أو توثيق السيكويل سيرفر إن كان لديك اسم مستخدم وكلمة مرور صحيحين (البيانات الأساسية هي sa لاسم المستخدم وكلمة مرور فارغة.)

استخدام لوحة التحكم

إذا كان لديك نسخة الخادم (نقصد بها أي نسخة عدا الإكسبريس Express) فيمكنك الدخول إلى السيرفر عن طريق فتح لوحة التحكم SQL Server Management Studio والتي يظهر عند فتحها مباشرة نافذة التوثيق شكل 2 (يمكنك أيضا فتح هذه النافذة عن طريق شاشة Object Explorer على اليسار أو عن طريق قائمة File > Connect.)

شكل 2 - الدخول إلى سيكويل سيرفر

شكل 2 - الدخول إلى سيكويل سيرفر

أيضا فهذه الشاشة تتيح لك استخدام نوعي التوثيق السابق ذكرهما وهما توثيق الويندوز وتوثيق السيكويل سيرفر.

استخدام الكود

ذكرنا الفيجوال ستوديو ولوحة التحكم، يأتي الآن وقت الكود. يمكنك تحديد طريقة التوثيق في سيكويل سيرفر عن طريق نص الاتصال Connection String والذي يمكنك من خلاله تحديد نوع التوثيق بطريقة من اثنتين:

  • توثيق الويندوز Windows Authentication:
    يمكنك ذلك عن طريق تحديد الخاصية Integrated Security في نص الاتصال Connection String.
  • توثيق السيكويل سيرفر SQL Server Authentication:
    يمكنك ذلك عن طريق تحديد خاصيتين الأول UserID (وتختصر على UID) وتحوي اسم المستخدم، والأخرى هي Password (وتختصر إلى PWD) لتحديد كلمة المرور.

الكود التالي يقوم بالاتصال بالسيرفر والتوثيق باستخدام المستخدم الحالي للويندوز:

    // Connecting to SQL Server default instance
    // to the default database using current
    // Windows user's identity.
    // The default database is usually MASTER.
    SqlConnection conn = new SqlConnection
        ("Data Source=;Initial Catalog=;Integrated Security=True");
    try
    {
        conn.Open();
        // Connected
    }
    catch (SqlException ex)
    {
        Console.WriteLine("{0}: {1}", ex.Number, ex.Message);
    }
    finally
    {
        conn.Close();
    }

أما الكود التالي فيقوم بالاتصال مع سيكويل سيرفر باستخدام مستخدم تم إنشاؤه مسبقا (لاحظ أنك تستطيع تبديل البيانات الحالية ببيانات المستخدم الأساسي الخاص بالسيكويل سيرفر وهو sa والذي ليس لديه كلمة مرور):

    // Connecting to SQL Server default instance
    // to the default database using the user
    // "My User" and his password "buzzword"
    // The default database is usually MASTER.
    SqlConnection conn = new SqlConnection
        ("Data Source=;Initial Catalog=;" +
        "User ID=My Username;Password=buzzword");
        // You can use also: "User ID=sa;Password="
    try
    {
        conn.Open();
        // Connected
    }
    catch (SqlException ex)
    {
        if (ex.Number == 18456)
            Console.WriteLine("Bad username or password.");
        else
            Console.WriteLine("{0}: {1}", ex.Number, ex.Message);
    }
    finally
    {
        conn.Close();
    }

لاحظ في الكود السابق أنه ربما يقوم سيكويل سيرفر بإرجاع كود الخطأ 18456 (أي 0x4818) عند فشل محاولة الدخول وذلك نظرا إما لعدم وجود هذا المستخدم في السيرفر أو لخطأ في بيانات دخوله.

الآن ننتقل إلى أول عملية نطبقها على السيكويل سيرفر وهي إنشاء بيانات دخول للمستخدمين.

معرفة المستخدمين المسجلين

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

  1. باستخدام لوحة التحكم SQL Server Management Studio.
  2. باستخدام أوامر T-SQL.

استخدام لوحة التحكم

لمعرفة المستخدمين المسجلين في سيكويل سيرفر من خلال لوحة التحكم قم أولا بفتح لوحة التحكم SQL Server Management Studio والدخول إلى السيرفر بأي بيانات صحيحة. بعد ذلك ومن خلال شاشة Object Explorer على اليسار قم بالدخول إلى السيرفر ومن ثم Security ثم Logins لتظهر لك على اليمين قائمة بالمستخدمين المسموح لهم بالتعامل مع سيكويل سيرفر.

استخدام جمل T-SQL

يتم ذلك ببساطة عن طريق الجدول الخاص بالسيكويل سيرفر (والذي يمكن الوصول إليه من خلال أي قاعدة) والمسمى server_principals والذي يحوي العديد من البيانات الخاصة بالتأمين في سيكويل سيرفر. الاستعلام التالي يقوم باسترجاع كافة البيانات الموجودة في هذا الجدول:

SELECT * FROM sys.server_principals
	ORDER BY type, [name];

شكل 3 يوضح نتائج الاستعلام على جهازي والتي سوف تكون مشابهة كثيرا للنتائج على جهازك:

شكل 3 - نتائج استعلام جدول server_principal

شكل 3 - نتائج استعلام جدول server_principal

بالطبع من خلال أسماء الأعمدة تستطيع معرفة فهم كافة البيانات المعروضة. ولكن يرجى ملاحظة أن العمود type يحوي نوع كل صف من هذه البيانات، ويهمنا منها الصفوف التي تحوي:

  • U:
    مستخدم قائم على توثيق الويندوز.
  • S:
    مستخدم خاص بالسيكويل سيرفر.

استخدام الكود

الآن ننتقل إلى التطبيق. الكود التالي يقوم باسترجاع المستخدمين المسجلين في سيكويل سيرفر وعرضهم:

SqlConnection conn = new SqlConnection
    ("Data Source=;Initial Catalog=;Integrated Security=True");
SqlCommand cmd = new SqlCommand
    ("SELECT * FROM sys.server_principals WHERE type='U' or type='S' " +
        @"ORDER by type, [name] ",
    conn);
try
{
    conn.Open();
    using (SqlDataReader reader = cmd.ExecuteReader())
    {
        while (reader.Read())
            Console.WriteLine("{0}, {1}", reader["name"],
                reader["type"] == "U" ? "Windows" : "SQL Server");
    }
}
catch (SqlException ex)
{
    if (ex.Number == 15025)
        Console.WriteLine("Login already exists.");
    else
        Console.WriteLine("{0}: {1}", ex.Number, ex.Message);
}
finally
{
    cmd.Dispose();
    conn.Close();
}

خاتمة

يوفر لك سيكويل سيرفر طريقتين للتوثيق: 1) توثيق الويندوز وهو القائم على بيانات الدخول الخاصة بمستخدم الويندوز الحالي. 2) توثيق سيكويل سيرفر وفيه يمكنك إنشاء أي عدد من المستخدمين كل مستخدم له اسم وكلمة مرور خاصة به.

يمكنك تحديد عبارة INTEGRATED SECURITY = TRUE في نص الاتصال مع السيرفر لاستخدام توثيق الويندوز، فإذا كان هذا المستخدم مسجلا في سيكويل سيرفر نجحت العملية وإلا فلا. يمكنك أيضا استخدام عبارتي Username و Password لاستخدام توثيق سيكويل سيرفر.

يوفر لك جدول النظام server_principals قائمة بجميع المستخدمين المسجلين في سيكويل سيرفر. يمكنك استخدام عمود النوع type لتحديد نوع المستخدم، فإذا كان المستخدم خاص بالويندوز فإن النوع يكون U، أما إذا كان خاص بالسيكويل سيرفر فيكون S.

ماذا بعد

من هذه السلسلة:

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

اخترنا لك:

أحدث المواضيع:

هل أعجبتك؟ شارك بها...