В чем разница между Integrated Security = True и Integrated Security = SSPI?
-
22-07-2019 - |
Вопрос
У меня есть два приложения, которые используют интегрированную защиту.Один назначает 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
, так и с
Вот полный набор синтаксисов в соответствии с MSDN - синтаксис строки подключения (ADO.NET)
Использование аутентификации 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
false
идентификатор пользователя и пароль указаны в строке подключения.
true
учетные данные Windows используются для проверки подлинности. Р>
Распознанные значения: true
, false
, yes
, no
и SSPI
. р>
Если указаны идентификатор пользователя
и пароль
, а для Integrated Security установлено значение true
, тогда идентификатор пользователя
и Пароль
будет игнорироваться, и будет использоваться встроенная защита
Обратите внимание, что строки подключения являются специфичными для что и как вы подключаетесь к данным.Они подключаются к одной и той же базе данных, но в первом случае используется поставщик данных .NET Framework для SQL Server.Интегрированная безопасность = True не будет работать для OleDb.
- Источник данных=.; Исходный каталог = aspnetdb; Встроенная безопасность = True
- Поставщик= SQLOLEDB; Источник данных =.; Интегрированная безопасность= SSPI; Начальный каталог = aspnetdb
Если вы сомневаетесь, используйте подключения к данным Visual Studio Server Explorer.
- Что такое sspi?
- Синтаксис строк подключения
True действителен, только если вы используете библиотеку .NET SqlClient. Недействительно при использовании OLEDB. Где в обоих случаях используется SSPI, либо вы используете библиотеку .net SqlClient, либо OLEDB.
С моей точки зрения,
Если вы не используете Integrated security = SSPI, вам нужно жестко указать имя пользователя и пароль в строке подключения, что означает «относительно небезопасно». почему, потому что все сотрудники имеют доступ, даже бывший сотрудник мог использовать информацию злонамеренно.