ما هو الفرق بين الأمان المتكامل = الأمان الحقيقي والمتكامل = SSPI؟

StackOverflow https://stackoverflow.com/questions/1229691

سؤال

لدي تطبيقان يستخدمان الأمان المتكامل. واحد يعين Integrated Security = true في سلسلة الاتصال ، والمجموعات الأخرى Integrated Security = SSPI.

ماهو الفرق بين SSPI و true في سياق الأمن المتكامل؟

هل كانت مفيدة؟

المحلول

وفق مايكروسوفت كلهم نفس الشئ.

متي false, ، يتم تحديد معرف المستخدم وكلمة المرور في الاتصال. عندما يكون صحيحًا ، يتم استخدام بيانات اعتماد حساب Windows الحالية للمصادقة.
القيم المعترف بها هي true, false, yes, no, ، و sspi (موصى به بشدة) ، وهو ما يعادل true.

نصائح أخرى

Integrated Security=true; لا يعمل في جميع مزودي SQL ، فإنه يلقي استثناء عند استخدامه مع OleDb مزود.

لذلك في الأساس Integrated Security=SSPI; يفضل لأن يعمل مع كليهما SQLClient & OleDB مزود.

إليك المجموعة الكاملة من بناء الجملة وفقًا لـ MSDN - بناء جملة سلسلة الاتصال (ado.net)

![Windows Auth Syntax

باستخدام مصادقة Windows

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

 Integrated Security = true;
 Integrated Security = SSPI;

ومع ذلك ، يعمل الثاني فقط مع مزود البيانات .NET Framework OLEDB. إذا قمت بتعيين Integrated Security = true للحصول على connectionstring يتم طرح استثناء.

لتحديد مصادقة Windows في مزود البيانات. Net Framework لـ ODBC ، يجب عليك استخدام زوج القيمة الرئيسية التالية.

Trusted_Connection = yes;

مصدر: MSDN: العمل مع سلاسل الاتصال

العديد من الأسئلة تحصل على إجابات إذا استخدمنا .Net Reflector لمعرفة الكود الفعلي لـ SqlConnection :) true و sspi هي نفسها:

internal class DbConnectionOptions

...

internal bool ConvertValueToIntegratedSecurityInternal(string stringValue)
{
    if ((CompareInsensitiveInvariant(stringValue, "sspi") || CompareInsensitiveInvariant(stringValue, "true")) || CompareInsensitiveInvariant(stringValue, "yes"))
    {
        return true;
    }
}

...

تحرير 20.02.2018الآن في .NET Core يمكننا رؤية المصدر المفتوح على GitHub! ابحث عن طريقة ConvertValuetoIngrategratedSecurityInternal:

https://github.com/dotnet/corefx/blob/fdbb160aeb0fad168b3603dbd971d568151a0c8/src/system.data.sqlclient/src/system/data/common

الأمان المتكامل = خطأ: يتم تحديد معرف المستخدم وكلمة المرور في الاتصال. الأمان المتكامل = صحيح: تستخدم بيانات اعتماد حساب Windows الحالية للمصادقة.

الأمان المتكامل = SSPI: هذا يعادل True.

يمكننا تجنب سمات اسم المستخدم وكلمة المرور من سلسلة الاتصال واستخدام الأمان المتكامل

اسمحوا لي أن أبدأ Integrated Security = false

false يتم تحديد معرف المستخدم وكلمة المرور في سلسلة الاتصال.
true تستخدم بيانات اعتماد حساب Windows للمصادقة.

القيم المعترف بها هي true, false, yes, no, ، و SSPI.

إذا User ID و Password يتم تحديدها وتم تعيين الأمان المتكامل إلى true, ، ومن بعد User ID و Password سيتم تجاهله وسيتم استخدام الأمن المتكامل

لاحظ أن سلاسل الاتصال خاصة بـ ماذا او ما و كيف أنت تتصل بالبيانات. يتم توصيلها بنفس قاعدة البيانات ولكن الأول يستخدم .NET Framework Data Server. الأمان المتكامل = صحيح لن يعمل مع OLEDB.

  • مصدر البيانات =. ؛ الكتالوج الأولي = ASPNETDB ؛ أمان متكامل = صحيح
  • Provider = sqloledb ؛ مصدر البيانات =.

عندما تكون في شك ، استخدم اتصالات بيانات Visual Studio Server Explorer.

True صالح فقط إذا كنت تستخدم مكتبة .NET SQLClient. إنه غير صالح عند استخدام OLEDB. حيث يكون SSPI BVAID في كلا ، فأنت تستخدم .NET SQLClient Library أو OLEDB.

من وجهة نظري،

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top