集成安全= True和集成安全= SSPI之间的区别
我有两个使用集成安全性的应用程序。 一个在连接string中分配Integrated Security = true
,另一个设置Integrated Security = SSPI
。
在综合安全的背景下, SSPI
和true
的区别是什么?
据微软说,他们是同样的事情。
如果为
false
,则在连接中指定用户标识和密码。 如果为true,则使用当前的Windows帐户凭据进行身份validation。
认可的值是true
,false
,yes
,no
,和sspi
(强烈推荐),这相当于是true
。
集成安全性= true; 在所有SQL提供程序中都不起作用,所以在与OleDb提供程序一起使用时会引发exception。
所以基本上集成安全= SSPI; 因为SQLClient和OleDB提供者都是首选。
其他选项是:
有关更多信息,请参阅: 连接string语法(ADO.NET)
使用Windows身份validation
build议连接到数据库服务器使用Windows身份validation,通常称为集成安全性。 要指定Windows身份validation,可以将以下两个键值对中的任何一个与数据提供者一起使用。 NET Framework for SQL Server:
Integrated Security = true; Integrated Security = SSPI;
但是,只有第二个数据提供程序与.NET Framework OleDb一起使用 。 如果您为ConnectionString设置Integrated Security = true
,则会引发exception。
在数据提供者中指定Windows身份validation。 .NET Framework for ODBC,则应使用以下键 – 值对。
Trusted_Connection = yes;
来源: MSDN:使用连接string
如果我们使用.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; } } ...
集成安全性= False:用户标识和密码在连接中指定。 集成安全性= true:当前的Windows帐户凭证用于身份validation。
集成安全= SSPI:这等同于真实。
我们可以避免连接string的用户名和密码属性,并使用集成安全性
让我从Integrated Security = false
false
在连接string中指定用户ID和密码。
true
Windows帐户凭证用于身份validation。
认可的价值观是true
, false
, yes
, no
,和SSPI
。
如果指定User ID
和Password
,并且集成安全性设置为true
,那么将忽略User ID
和Password
并使用集成安全性
请注意,连接string是特定于什么以及如何连接到数据。 这些连接到相同的数据库,但首先是使用SQL Server的.NET Framework数据提供程序。 集成安全性= True对OleDb不起作用。
- 数据源=;初始目录= aspnetdb;集成安全性= True
- Provider = SQLOLEDB; Data Source = .;集成安全性= SSPI;初始目录= aspnetdb
如有疑问,请使用Visual Studio Server Explorer数据连接。
- 什么是sspi ?
- 连接string语法
如果您使用.NET SqlClient库,则True才有效。 使用OLEDB时无效。 SSPI在你使用.net SqlClient库或OLEDB的地方都可以。
在我看来,
如果你不使用集成安全性= SSPI,那么你需要在连接string中对用户名和密码进行硬编码,这意味着“相对不安全”,因为所有员工都有权访问,甚至前员工也可以恶意使用这些信息。