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

在集成安全上下文中,SSPI和true之间的区别是什么?


当前回答

请注意,连接字符串特定于连接到数据的内容和方式。它们连接到同一个数据库,但第一个是使用。net Framework Data Provider for SQL Server。集成安全性=True将不适用于OleDb。

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

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

什么是sspi? 连接字符串语法

其他回答

在我看来,

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

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

集成安全= true;并非在所有SQL提供程序中都有效,它在与OleDb提供程序一起使用时会抛出异常。

综合安全=SSPI;优先使用SQLClient和OleDB提供程序。

下面是根据MSDN -连接字符串语法(ADO.NET)的全套语法

请注意,连接字符串特定于连接到数据的内容和方式。它们连接到同一个数据库,但第一个是使用。net Framework Data Provider for SQL Server。集成安全性=True将不适用于OleDb。

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

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

什么是sspi? 连接字符串语法

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