Яка різниця між інтегрованою безпекою = правда та інтегрованою безпекою = SSPI?


531

У мене є два додатки, які використовують інтегровану безпеку. Один призначає Integrated Security = trueрядок з'єднання, а інший встановлює Integrated Security = SSPI.

У чому різниця між SSPIта trueв контексті інтегрованої безпеки?


70
Прийнята відповідь є не найкращою, і не повністю коректною. Integrated Security = Trueабо SSPIне однакові. Integrated Security=true;працює не у всіх постачальників SQL, він викидає виняток при використанні з OleDbпровайдером. Таким чином, в основному Integrated Security=SSPI;є кращим, оскільки працює з обома SQLClient& OleDBпровайдером. Я додав відповідь для кращого роз'яснення.
Пранав Сінгх

3
@PranavSingh має правильну ідею, це питання є неповним, якщо не вказати, якого постачальника ви використовуєте. Різні провайдери приймають та / або переводять різні рядки у внутрішні стани.
Mark

Хоча вони однакові, я вважаю, що в одному з веб-сайтів був дуже старий документ, у той час мені було цікаво так само, як і ви, що сказав, що ви розробляєте для Windows Mobile (не те, що ви бачите сьогодні, старі пристрої, які я не пам'ятайте суфікс ОС, оскільки у мене його ніколи не було), ви повинні використовувати SSPI та User User разом. але оскільки я ніколи не писав жодного і не пам’ятаю джерела цього документа, я не можу його гарантувати.
мертвийManN

Відповіді:


436

На думку Microsoft, це те саме.

Коли falseв з’єднанні вказані ідентифікатор користувача та пароль. Якщо це правда, для автентифікації використовуються поточні облікові записи Windows.
Визнані значення true, false, yes, no, і sspi(настійно рекомендується), що еквівалентно true.


28
Спочатку я думаю, що була різниця в тому, що "True" використовував NTLM, а "SSPI" використовував Kerberos, але вони зараз взаємозамінні.
SqlRyan

5
Не перевірили останній коментар, але якщо це правда, слід відповісти, але не коментар
Johnny_D

20
@RodneyFoley Вибачте, мої тести підтверджують, що ця відповідь правильна, а ваш коментар - ні. Можливо, це працювало колись, але це не зараз, і ви не можете надати жодної посилання на документ Microsoft, який підтримує вашу думку.
Кірк Бродхерст

3
Погодьтеся з Кірком. Користувач / пароль ігноруються, коли вказано SSPI - .net 4.0, SQL сервер 2012.
Alex des Pelagos

3
Тож якщо вони "те саме", чому SSPI "настійно рекомендується", а не "правда" або "так? Ось чому я прийшов до цього питання ...
Zé Carlos

171

Integrated Security=true;працює не у всіх постачальників SQL, він викидає виняток при використанні з OleDbпровайдером.

Таким чином, в основному Integrated Security=SSPI;є кращим, оскільки працює з обома SQLClient& OleDBпровайдером.

Ось повний набір синтаксисів відповідно до MSDN - Syntax String Syntax (ADO.NET)

! [Синтаксис автентичності Windows


73

Використання автентифікації Windows

Для підключення до сервера баз даних рекомендується використовувати автентифікацію Windows, широко відому як інтегрована безпека. Щоб вказати автентифікацію Windows, ви можете використовувати будь-яку з наступних двох пар ключових значень із постачальником даних. NET Framework для SQL Server:

 Integrated Security = true;
 Integrated Security = SSPI;

Однак лише другий працює з постачальником даних .NET Framework OleDb . Якщо ви встановили Integrated Security = trueдля ConnectionString, викидається виняток.

Щоб вказати автентифікацію Windows у постачальника даних. NET Framework для ODBC, ви повинні використовувати наступну пару ключ-значення.

Trusted_Connection = yes;

Джерело: MSDN: Робота з рядками підключення


33

На багато питань отримуємо відповіді, якщо ми .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;
    }
}

...

EDIT 20.02.2018 Тепер у .Net Core ми можемо побачити його відкрите джерело на github! Пошук методу ConvertValueToIntegratedSecurityInternal:

https://github.com/dotnet/corefx/blob/fdbb160aeb0fad168b3603dbdd971d568151a0c8/src/System.Data.SqlClient/src/System/Data/Common/DbConnectionOptions.cs


2
Ця частина коду є властивістю лише для одного випадку, який пояснюється назвою ConvertValueToIntegratedSecurityInternal. Це властивість використовується лише тоді, коли постачальник є SqlClientтаким SqlClient, SSPI& trueвони однакові, але не тоді, коли клієнт є OleDbабо OracleClient. Я уточнив, що в stackoverflow.com/a/23637478/704008 з посиланням на msdn
Pranav Singh

Тут проголосуємо за програму Пранава.
Скотт

21

Вбудована безпека = Неправда: ідентифікатор користувача та пароль вказані у з'єднанні. Інтегрована безпека = вірно: поточні облікові дані Windows використовуються для аутентифікації.

Вбудована безпека = SSPI: це рівнозначно істині.

Ми можемо уникати атрибутів імені користувача та пароля з рядка з'єднання та використовувати інтегровану безпеку


13

Дозвольте почати з Integrated Security = false

false Ідентифікатор користувача та пароль вказані в рядку з'єднання.
true Встановлення облікових даних Windows використовується для аутентифікації.

Визнані значення true, false, yes, no, і SSPI.

Якщо User IDі Passwordвизначені і Integrated Security встановлений на true, то User IDі Passwordбуде ігноруватися і буде використовуватися Integrated Security


7

Зауважте, що рядки з'єднання визначаються тим, що і як ви підключаєтесь до даних. Вони підключаються до однієї бази даних, але в першу чергу використовується постачальник даних .NET Framework Data для SQL Server. Вбудована безпека = True не працює для OleDb.

  • Джерело даних =; Початковий каталог = aspnetdb; інтегрована безпека = істина
  • Провайдер = SQLOLEDB; Джерело даних =; Комплексна безпека = SSPI; Початковий каталог = aspnetdb

Якщо ви сумніваєтеся, використовуйте підключення даних Visual Studio Server Explorer.



2

На мій погляд,

Якщо ви не використовуєте інтегровану безпеку = SSPI, вам потрібно ввести жорсткий код імені користувача та пароля в рядку з'єднання, що означає "відносно небезпечно", тому що, тому що всі співробітники мають доступ, навіть колишній працівник може зловмисно використовувати інформацію.


1
Рядок підключення не обов'язково видно будь-якому працівникові.
підкреслюй_d
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.