Integrated Security = True和Integrated Security = SSPI有什么区别?

时间:2009-08-04 20:15:32

标签: sql-server security connection-string database-security

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

在集成安全环境中SSPItrue之间有什么区别?

9 个答案:

答案 0 :(得分:399)

根据Microsoft,他们是一回事。

  

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

答案 1 :(得分:131)

Integrated Security=true;在所有SQL提供程序中都不起作用,它在与OleDb提供程序一起使用时会引发异常。

所以基本上Integrated Security=SSPI;是首选,因为适用于SQLClient& OleDB提供商。

根据MSDN - Connection String Syntax (ADO.NET)

,这是完整的语法集

![Windows Auth Syntax

答案 2 :(得分:63)

使用Windows身份验证

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

 Integrated Security = true;
 Integrated Security = SSPI;

但是,只有第二个适用于数据提供程序 .NET Framework OleDb 。如果为ConnectionString设置Integrated Security = true,则抛出异常。

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

Trusted_Connection = yes;

来源:MSDN: Working with Connection Strings

答案 3 :(得分:31)

如果我们使用.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

答案 4 :(得分:21)

Integrated Security = False:在连接中指定了用户ID和密码。 Integrated Security = true:当前的Windows帐户凭据用于身份验证。

集成安全性= SSPI:这与true相同。

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

答案 5 :(得分:13)

让我先从Integrated Security = false

开始

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

已识别的值为truefalseyesnoSSPI

如果指定了User IDPassword且“集成安全性”设置为true,则会忽略User IDPassword并使用集成安全性

答案 6 :(得分:7)

请注意,连接字符串特定于您连接到数据的 。它们连接到同一个数据库,但第一个是使用.NET Framework Data Provider for SQL Server。 Integrated Security = True对OleDb不起作用。

  • Data Source = .; Initial Catalog = aspnetdb; Integrated Security = True
  • Provider = SQLOLEDB; Data Source = .; Integrated Security = SSPI; Initial Catalog = aspnetdb

如有疑问,请使用Visual Studio服务器资源管理器数据连接。

答案 7 :(得分:5)

True仅在您使用.NET SqlClient库时才有效。使用OLEDB时无效。 无论您使用.net SqlClient库还是OLEDB,SSPI都是bvaid。

答案 8 :(得分:2)

在我看来,

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