Вопрос

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

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

Это было полезно?

Решение

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

  

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

Другие советы

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

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

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

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

Использование аутентификации 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: работа со строками подключения

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

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

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

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

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

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

Распознанные значения: true , false , yes , no и SSPI .

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top