ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

公认的答案不是最好的答案,也不是完全正确的。 Integrated Security = TrueSSPI 不相同。 Integrated Security=true; 不适用于所有 SQL 提供程序,它在与 OleDb 提供程序一起使用时会引发异常。所以基本上 Integrated Security=SSPI; 是首选,因为它同时适用于 SQLClientOleDB 提供者。我添加了一个答案以便更好地澄清。
@PranavSingh 的想法是正确的,除非您指定您使用的提供商,否则这个问题是不完整的。不同的提供者接受和/或将各种字符串转换为内部状态。
虽然它们是相同的,但我相信其中一个网站上有一个非常旧的文档,当时我和你一样好奇,说如果你正在为 windows mobile 开发(不是你今天看到的,我的旧设备不记得操作系统后缀,因为我从来没有过),你应该一起使用 SSPI 和用户密码。但由于我从未写过,而且我不记得该文件的来源,我无法保证。
SSPI 的缩写是什么? “SS”希望是指 SQL Server,但不确定 SI 是什么意思。

T
Tim

根据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 而不是“真实”或“是”?这就是我提出这个问题的原因......
P
Pranav Singh

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

所以基本上 Integrated Security=SSPI; 是首选,因为它同时适用于 SQLClientOleDB 提供者。

这是根据 MSDN - Connection String Syntax (ADO.NET) 的完整语法集

https://i.stack.imgur.com/spIRt.jpg


这个答案不是重复第三个评价的吗?
@Yola 这个答案更完整一些,还链接到仍然有效的 Microsoft Docs 页面(另一个答案中的链接现在将您带到建议下载 Visual Studio 2005 Retired docs 的页面)。
A
Arun Chandran Chackachattil

使用 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


P
Pavel Biryukov

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


这部分代码仅适用于可以通过名称 ConvertValueToIntegratedSecurityInternal 解释的一种情况。该属性仅在提供者为 SqlClient 时使用,因此在 SqlClient 中,SSPItrue 相同,但在客户端为 OleDbOracleClient 时不使用。我已经在 stackoverflow.com/a/23637478/704008 中通过 msdn 参考说明了这一点
S
SteveC

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

Integrated Security = SSPI :这等价于 true。

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


S
Shimmy Weitzhandler

让我从Integrated Security = false开始

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

可识别的值为 truefalseyesnoSSPI

如果指定了 User IDPassword 并将 Integrated Security 设置为 true,则 User IDPassword 将被忽略并使用 Integrated Security


u
user1874524

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

数据源=.;初始目录=aspnetdb;集成安全=True

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

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

什么是sspi?

连接字符串语法


A
Amit Shishodia

True 仅在您使用 .NET SqlClient 库时有效。使用 OLEDB 时无效。 SSPI 在您使用 .net SqlClient 库或 OLEDB 时都适用。


S
Sathishkumar

在我看来,

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


连接字符串不一定对任何员工可见。