В чем разница между интегрированной безопасностью = True и интегрированной безопасностью = 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 имеет правильную идею, этот вопрос является неполным, если вы не укажете, какого провайдера вы используете. Различные поставщики принимают и / или переводят различные строки во внутренние состояния.
Марк

Хотя они одинаковы, я считаю, что на одном из веб-сайтов был очень старый документ, в то время как мне было любопытно так же, как и вам, в котором говорилось, что вы разрабатываете для Windows Mobile (не то, что вы видите сегодня, старые устройства, которые я не помню суффикс ОС, поскольку у меня его никогда не было), вы должны использовать SSPI и пароль пользователя вместе. но так как я никогда не писал ни одного, и я не помню источник этого документа, я не могу гарантировать это.
DeadManN

Ответы:


436

По словам Microsoft , это одно и то же.

Когда falseидентификатор пользователя и пароль указаны в соединении. При значении true для проверки подлинности используются учетные данные текущей учетной записи 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 Server 2012.
Алекс де Пелагос

3
Так что, если они «одно и то же», почему SSPI «настоятельно рекомендуется», а не «правда» или «да»? Вот почему я пришел к этому вопросу ...
Зе Карлос

171

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

Так что в основном Integrated Security=SSPI;предпочтительнее, так как работает как с поставщиком, так SQLClientи с OleDBпоставщиком.

Вот полный набор синтаксисов в соответствии с MSDN - Синтаксис строки подключения (ADO.NET)

! [Синтаксис аутентификации Windows


73

Использование аутентификации Windows

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

 Integrated Security = true;
 Integrated Security = SSPI;

Однако только второй работает с поставщиком данных .NET Framework OleDb . Если вы установили Integrated Security = trueConnectionString, выдается исключение.

Чтобы указать проверку подлинности 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;
    }
}

...

РЕДАКТИРОВАТЬ 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

Здесь голосуйте за причину Пранава.
Скотт

21

Integrated Security = False: идентификатор пользователя и пароль указываются в соединении. Integrated Security = true: для аутентификации используются текущие учетные данные 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 для SQL Server. Integrated Security = True не будет работать для OleDb.

  • Источник данных =; Исходный каталог = aspnetdb; Интегрированная безопасность = True
  • Поставщик = SQLOLEDB; Источник данных = .; Интегрированная безопасность = SSPI; Начальный каталог = aspnetdb

В случае сомнений используйте подключения к данным в Visual Studio Server Explorer.



2

С моей точки зрения,

Если вы не используете Integrated security = SSPI, то вам нужно жестко указать имя пользователя и пароль в строке подключения, что означает «относительно небезопасный», потому что, поскольку все сотрудники имеют доступ, даже бывший сотрудник мог использовать информацию злонамеренно.


1
Строка подключения не обязательно видна любому сотруднику.
underscore_d
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.