我有两个使用集成安全性的应用程序.一个分配Integrated Security = true
连接字符串,另一个分配Integrated Security = SSPI
.
是什么区别SSPI
,并true
在集成安全性的情况下?
据微软称,他们是一回事.
何时
false
,在连接中指定了用户ID和密码.如果为true,则使用当前Windows帐户凭据进行身份验证.
识别的值为true
,false
,yes
,no
,和sspi
(强烈推荐),这相当于true
.
Integrated Security=true;
在所有SQL提供程序中都不起作用,它在与OleDb
提供程序一起使用时会引发异常.
所以基本上Integrated Security=SSPI;
是首选,因为SQLClient
与OleDB
提供者兼容.
这是根据MSDN的完整语法集- 连接字符串语法(ADO.NET)
使用Windows身份验证
建议使用Windows身份验证(通常称为集成安全性)连接到数据库服务器.要指定Windows身份验证,可以将以下两个键值对中的任何一个与数据提供程序一起使用.用于SQL Server的.NET Framework:
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方法:
https://github.com/dotnet/corefx/blob/fdbb160aeb0fad168b3603dbdd971d568151a0c8/src/System.Data.SqlClient/src/System/Data/Common/DbConnectionOptions.cs
Integrated Security = False:在连接中指定用户ID和密码.Integrated Security = true:当前Windows帐户凭据用于身份验证.
集成安全性= SSPI:这与真实相当.
我们可以避免连接字符串中的用户名和密码属性,并使用集成安全性
让我先谈谈 Integrated Security = false
false
用户ID和密码在连接字符串中指定.
true
Windows帐户凭据用于身份验证.
可识别的值为true
,false
,yes
,no
,和SSPI
.
如果User ID
和Password
指定,并集成安全性设置为true
,那么User ID
与Password
将被忽略,集成的安全性将使用
需要注意的是连接字符串特定于什么和如何您要连接到的数据.它们连接到同一个数据库,但第一个是使用.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数据连接.
什么是sspi?
连接字符串语法
True仅在您使用.NET SqlClient库时才有效.使用OLEDB时无效.无论您使用.net SqlClient库还是OLEDB,SSPI都是bvaid.