集成安全性= True和集成安全性= SSPI之间的区别是什么?

我有两个应用程序使用集成安全。一个在连接字符串中分配Integrated Security = true,另一个设置Integrated Security = SSPI

在集成安全上下文中,SSPItrue之间有什么区别?

749895 次浏览

根据微软,它们是一样的。

false时,在连接中指定了用户ID和密码。当为true时,将使用当前Windows帐户凭据进行身份验证 可识别的值为truefalseyesnosspi(强烈推荐),相当于true

让我从Integrated Security = false开始

false用户ID和密码在连接字符串中指定 true Windows帐户凭据用于身份验证。

可识别的值是truefalseyesnoSSPI

如果指定了User IDPassword,并且集成安全设置为true,那么User IDPassword将被忽略,集成安全将被使用

# EYZ0 < / >强

要连接到数据库服务器,建议使用Windows身份验证,通常称为集成安全。要指定Windows身份验证,可以对数据提供程序使用以下两个键-值对中的任意一个。NET Framework for SQL Server:

 Integrated Security = true;
Integrated Security = SSPI;

但是,只有第二种方法使用数据提供程序.NET框架OleDb。如果您为ConnectionString设置了Integrated Security = true,则会抛出异常。

在数据提供程序中指定Windows身份验证。NET框架的ODBC,您应该使用以下键值对。

Trusted_Connection = yes;

来源:# EYZ0

Integrated Security = False:用户ID和密码在连接中指定。 Integrated Security = true:使用当前Windows帐户凭据进行认证

集成安全性= SSPI:这相当于true。

我们可以避免连接字符串中的用户名和密码属性,并使用集成安全性

如果我们使用.Net Reflector来查看SqlConnection的实际代码,许多问题都会得到答案:) truesspi相同:

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

注意,连接字符串特定于您要连接到的数据什么如何。它们连接到同一个数据库,但第一个是使用。net Framework Data Provider for SQL Server。集成安全性=True将不适用于OleDb。

  • 数据源=.;初始目录=aspnetdb;集成安全性=True
  • 提供者=SQLOLEDB;数据源=.;集成安全性=SSPI;初始目录=aspnetdb

如果有疑问,请使用Visual Studio Server Explorer数据连接。

Integrated Security=true;并不适用于所有SQL提供程序,当与OleDb提供程序一起使用时,它会抛出异常。

所以基本上Integrated Security=SSPI;是首选,因为SQLClient &# EYZ2提供者。

下面是根据MSDN -连接字符串语法(ADO.NET)给出的完整语法集

![Windows认证语法 .

True仅在使用. net SqlClient库时有效。它在使用OLEDB时无效。 无论您使用的是。net SqlClient库还是OLEDB,其中SSPI都是bvaid

在我看来,

如果你不使用集成安全=SSPI,那么你需要在连接字符串中硬编码用户名和密码,这意味着“相对不安全”,为什么,因为所有的员工都有访问权限,甚至前员工也可以恶意使用信息。