我有两个使用Integrated Security的应用程序。一个分配Integrated Security = true
连接字符串,另一个分配Integrated Security = SSPI
。
是什么区别SSPI
,并true
在集成安全性的情况下?
我有两个使用Integrated Security的应用程序。一个分配Integrated Security = true
连接字符串,另一个分配Integrated Security = SSPI
。
是什么区别SSPI
,并true
在集成安全性的情况下?
Answers:
根据微软的说法,它们是同一回事。
如果为
false
,则在连接中指定用户ID和密码。设置为true时,将使用当前Windows帐户凭据进行身份验证。
被识别的值true
,false
,yes
,no
,和sspi
(强烈推荐),这相当于true
。
Integrated Security=true;
并非在所有SQL提供程序中都有效,与OleDb
提供程序一起使用时会引发异常。
所以基本上Integrated Security=SSPI;
是首选,因为与SQLClient
&OleDB
provider 都可以使用。
这是根据MSDN的完整语法集-连接字符串语法(ADO.NET)
使用Windows身份验证
建议连接到数据库服务器使用Windows身份验证,通常称为集成安全性。要指定Windows身份验证,可以将以下两个键值对中的任何一个与数据提供程序一起使用。NET Framework for SQL Server:
Integrated Security = true;
Integrated Security = SSPI;
但是,只有第二个可以与数据提供程序.NET Framework OleDb一起使用。如果Integrated Security = true
为ConnectionString 设置,则会引发异常。
在数据提供程序中指定Windows身份验证。NET Framework for ODBC,您应该使用以下键/值对。
Trusted_Connection = yes;
来源:MSDN:使用连接字符串
如果我们.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方法:
ConvertValueToIntegratedSecurityInternal
。仅当provider SqlClient
处于&中并且&相同时才使用该属性SqlClient
,而当client为or 时则不使用。我已经阐明,在具有msdn参考的stackoverflow.com/a/23637478/704008中SSPI
true
OleDb
OracleClient
只有在使用.NET SqlClient库时,True才有效。使用OLEDB时无效。在使用.net SqlClient库或OLEDB的情况下,都无法使用SSPI。
在我看来,
如果您不使用Integrated security = SSPI,那么您需要在连接字符串中对用户名和密码进行硬编码,这意味着“相对不安全”,原因是,所有员工甚至前雇员都可以恶意使用该信息。
Integrated Security = True
还是SSPI
不一样。Integrated Security=true;
并非在所有SQL提供程序中都有效,与OleDb
提供程序一起使用时会引发异常。所以基本上Integrated Security=SSPI;
是首选,因为与SQLClient
&OleDB
provider 都可以使用。我添加了一个答案,以进行更好的说明。