Integrated Security = True 和 Integrated Security = SSPI 有啥区别?
Posted
技术标签:
【中文标题】Integrated Security = True 和 Integrated Security = SSPI 有啥区别?【英文标题】:What is the difference between Integrated Security = True and Integrated Security = SSPI?Integrated Security = True 和 Integrated Security = SSPI 有什么区别? 【发布时间】:2010-11-16 19:30:32 【问题描述】:我有两个使用集成安全性的应用程序。一个在连接字符串中分配Integrated Security = true
,另一个设置Integrated Security = SSPI
。
在集成安全环境中SSPI
和true
有什么区别?
【问题讨论】:
公认的答案不是最好的,也不是完全正确的。Integrated Security = True
或 SSPI
不一样。 Integrated Security=true;
不适用于所有 SQL 提供程序,当与 OleDb
提供程序一起使用时会引发异常。所以基本上Integrated Security=SSPI;
是首选,因为它可以与SQLClient
和OleDB
提供者一起使用。我添加了一个答案以便更好地澄清。
@PranavSingh 有正确的想法,除非您指定您使用的 provider,否则这个问题是不完整的。不同的提供者接受和/或将各种字符串转换为内部状态。
虽然它们是一样的,但我相信其中一个网站上有一个非常古老的文档,当时我和你一样好奇,说如果你正在为 windows mobile 开发(不是你的今天看到,我不记得操作系统后缀的旧设备,因为我从来没有过),你应该一起使用 SSPI 和用户密码。但由于我从来没有写过,而且我不记得那个文件的来源,我不能保证。
SSPI 的缩写是什么? “SS”希望是指 SQL Server,但不确定 SI 是什么意思。
【参考方案1】:
根据Microsoft,它们是同一个东西。
false
时,在连接中指定用户 ID 和密码。如果为 true,则使用当前 Windows 帐户凭据进行身份验证。 识别值为true
、false
、yes
、no
、sspi
(强烈推荐),相当于true
。
【讨论】:
最初,我认为“True”使用 NTLM 和“SSPI”使用 Kerberos 有所不同,但它们现在可以互换。 没有检查最后一条评论,但如果为真,应该作为答案,而不是评论 @RodneyFoley 抱歉,我的测试证实这个答案是正确的,而您的评论不是。也许它曾经这样工作过,但现在不行了,而且你不能提供任何支持你观点的 Microsoft 文档的参考。 同意柯克的观点。指定 SSPI 时忽略用户/密码 - .net 4.0, SQL server 2012。 那么,如果它们“是同一件事”,为什么 SSPI “强烈推荐”而不是“真的”或“是的?这就是我提出这个问题的原因......【参考方案2】:Integrated Security=true;
不适用于所有 SQL 提供程序,当与OleDb
提供程序一起使用时会引发异常。
所以基本上Integrated Security=SSPI;
是首选,因为它可以与SQLClient
和OleDB
提供者一起使用。
这里是根据MSDN - Connection String Syntax (ADO.NET)的完整语法集
【讨论】:
这个答案不是重复了第三个评分的吗? @Yola 这个答案更完整,还链接到仍然有效的 Microsoft Docs 页面(另一个答案中的链接现在将您带到建议下载 Visual Studio 2005 Retired docs 的页面) .【参考方案3】:使用 Windows 身份验证
连接数据库服务器推荐使用Windows Authentication,俗称集成安全。要指定 Windows 身份验证,您可以将以下两个键值对中的任何一个与数据提供程序一起使用。 NET 框架用于 SQL Server:
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
【讨论】:
【参考方案4】:如果我们使用.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 方法:
https://github.com/dotnet/corefx/blob/fdbb160aeb0fad168b3603dbdd971d568151a0c8/src/System.Data.SqlClient/src/System/Data/Common/DbConnectionOptions.cs
【讨论】:
这部分代码仅适用于可以通过名称ConvertValueToIntegratedSecurityInternal
解释的一种情况。该属性仅在提供者为SqlClient
时使用,因此SqlClient
、SSPI
和true
相同,但当客户端为OleDb
或OracleClient
时则不同。我已经在 ***.com/a/23637478/704008 中用 msdn 参考说明了这一点【参考方案5】:
Integrated Security = False:在连接中指定了用户 ID 和密码。 Integrated Security = true :当前的 Windows 帐户凭据用于身份验证。
Integrated Security = SSPI :这等效于 true。
我们可以避免连接字符串中的用户名和密码属性,并使用集成安全性
【讨论】:
【参考方案6】:让我从Integrated Security = false
开始
false
用户 ID 和密码在连接字符串中指定。true
Windows 帐户凭据用于身份验证。
识别值为true
、false
、yes
、no
和SSPI
。
如果指定了User ID
和Password
并将Integrated Security 设置为true
,则User ID
和Password
将被忽略并使用Integrated Security
【讨论】:
【参考方案7】:请注意,连接字符串特定于您连接数据的内容和方式。它们连接到同一个数据库,但第一个是使用 .NET Framework Data Provider for SQL Server。 Integrated Security=True 不适用于 OleDb。
数据源=.;初始目录=aspnetdb;集成安全=True Provider=SQLOLEDB;Data Source=.;Integrated Security=SSPI;Initial Catalog=aspnetdb如有疑问,请使用 Visual Studio Server Explorer 数据连接。
什么是sspi? Connection Strings Syntax【讨论】:
【参考方案8】:True 仅在您使用 .NET SqlClient 库时有效。使用 OLEDB 时无效。 SSPI 在您使用 .net SqlClient 库或 OLEDB 时都适用。
【讨论】:
social.msdn.microsoft.com/Forums/en-US/…【参考方案9】:在我看来,
如果您不使用 Integrated security=SSPI,那么您需要在连接字符串中硬编码用户名和密码,这意味着“相对不安全”,因为所有员工都可以访问,甚至前员工也可以恶意使用这些信息。
【讨论】:
连接字符串不一定对任何员工可见。以上是关于Integrated Security = True 和 Integrated Security = SSPI 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
Trusted_Connection 与 Integrated Security 影响连接池
Java JDBC 连接 Integrated Security 只能在我的 Eclipse 中工作
关于SQL连接语句中的Integrated Security=SSPI/ture/false
Integrated Security=SSPI 是不是需要管理员组中的 Windows 用户?
在 Integrated Security = False 的客户端计算机上将 SQL Compact 替换为 SQL LocalDB