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

JD.*_*JD. 502 sql-server security connection-string database-security

我有两个使用集成安全性的应用程序.一个分配Integrated Security = true连接字符串,另一个分配Integrated Security = SSPI.

是什么区别SSPI,并true在集成安全性的情况下?

小智 410

微软称,他们是一回事.

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

  • 最初,我认为"True"使用NTLM和"SSPI"使用Kerberos有所不同,但它们现在可以互换. (27认同)
  • @RodneyFoley对不起,我的测试证实这个答案是正确的,你的评论不是.也许它曾经这样工作过一次,但现在还没有,并且您无法提供任何支持您的意见的Microsoft文档的参考. (20认同)
  • 没有检查最后的评论,但如果是真的,应该作为答案,但不是评论 (5认同)
  • 同意柯克.SSPI指定时忽略用户/密码 - .net 4.0,SQL Server 2012. (3认同)
  • @ZéCarlos好的,明白了.不知何故,这是最高票数的接受答案:).我添加了相同澄清的答案 (3认同)
  • @RodneyFoley我使用错误的用户名和密码使用SSPI,但它并不关心并在net4.0中成功连接.这是预期的结果吗? (2认同)
  • 因此,如果他们"是同一件事",为什么SSPI"强烈推荐"而不是"真实"或"是"?这就是我提出这个问题的原因...... (2认同)
  • @ZéCarlos他们不一样,请参阅/sf/answers/1654623491/ (2认同)

Pra*_*ngh 152

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

所以基本上Integrated Security=SSPI;是首选,因为SQLClientOleDB提供者兼容.

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

![Windows Auth语法

  • @Yola 这个答案更加完整,并且还链接到仍然有效的 Microsoft Docs 页面(另一个答案中的链接现在会将您带到建议下载 Visual Studio 2005 Retired 文档的页面)。 (2认同)

Ase*_*are 65

使用Windows身份验证

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

 Integrated Security = true;
 Integrated Security = SSPI;
Run Code Online (Sandbox Code Playgroud)

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

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

Trusted_Connection = yes;
Run Code Online (Sandbox Code Playgroud)

来源:MSDN:使用连接字符串


Pav*_*kov 30

如果我们.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;
    }
}

...
Run Code Online (Sandbox Code Playgroud)

编辑20.02.2018 现在在.Net Core我们可以在github上看到它的开源!搜索ConvertValueToIntegratedSecurityInternal方法:

https://github.com/dotnet/corefx/blob/fdbb160aeb0fad168b3603dbdd971d568151a0c8/src/System.Data.SqlClient/src/System/Data/Common/DbConnectionOptions.cs

  • 这部分代码仅是一种情况下的属性,这种情况可以通过名称“ ConvertValueToIntegratedSecurityInternal”来解释。仅当提供者为SqlClient时才使用该属性,因此在SqlClient,SSPI和true中是相同的,而当客户端为OleDb或OracleClient时则不使用。我已经澄清了在/sf/answers/1654623491/中具有msdn参考 (2认同)

小智 21

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

集成安全性= SSPI:这与真实相当.

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


kud*_*ger 13

让我先谈谈 Integrated Security = false

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

可识别的值为true,false,yes,no,和SSPI.

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


小智 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 Server Explorer数据连接.


小智 5

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