В чем разница между интегрированной безопасностью = True и интегрированной безопасностью = SSPI? - PullRequest
480 голосов
/ 05 августа 2009

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

В чем разница между SSPI и true в контексте интегрированной безопасности?

Ответы [ 9 ]

401 голосов
/ 05 августа 2009

Согласно Microsoft это одно и то же.

Когда false, идентификатор пользователя и пароль указываются в соединении. При значении true для проверки подлинности используются учетные данные текущей учетной записи Windows.
Возможные значения: true, false, yes, no и sspi (настоятельно рекомендуется), что эквивалентно true.

137 голосов
/ 13 мая 2014

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

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

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

![Windows Auth Syntax

64 голосов
/ 13 июля 2012

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

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

 Integrated Security = true;
 Integrated Security = SSPI;

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

Чтобы указать проверку подлинности Windows в поставщике данных. NET Framework для ODBC, вы должны использовать следующую пару ключ-значение.

Trusted_Connection = yes;

Источник: MSDN: Работа со строками подключения

31 голосов
/ 03 октября 2013

Многие вопросы получают ответы, если мы используем .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

21 голосов
/ 23 января 2013

Integrated Security = False: идентификатор пользователя и пароль указываются в соединении. Integrated Security = true: для аутентификации используются текущие учетные данные учетной записи Windows.

Комплексная безопасность = SSPI: это эквивалентно истине.

Мы можем избежать атрибутов имени пользователя и пароля из строки подключения и использовать встроенную защиту

13 голосов
/ 05 июля 2012

Позвольте мне начать с Integrated Security = false

false Идентификатор пользователя и пароль указаны в строке подключения.
true Учетные данные Windows используются для аутентификации.

Допустимые значения: true, false, yes, no и SSPI.

Если указаны User ID и Password и для Integrated Security установлено значение true, тогда User ID и Password будут игнорироваться и будет использоваться Integrated Security

7 голосов
/ 03 апреля 2014

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

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

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

5 голосов
/ 09 января 2015

True действителен, только если вы используете библиотеку .NET SqlClient. Недействительно при использовании OLEDB. Где SSPI bvaid в обоих случаях вы используете библиотеку .net SqlClient или OLEDB.

2 голосов
/ 02 октября 2017

На мой взгляд,

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

...