不能使用帐户从WCF服务连接到SQL Server
本文关键字:连接 服务 SQL Server WCF 不能 | 更新日期: 2023-09-27 17:49:42
我正在尝试从wcf服务连接到sql server。使用集成安全,它工作得很好,但当我使用一个帐户时,它失败了。我能够使用这个帐户连接到sqL server管理工作室。我不确定我错过了什么,我是否需要另一个提供商来做访问。感谢任何反馈。
<add name="GISDBConnectionString" connectionString="Data Source=SVRName;Initial Catalog=db;User ID=GLOBAL'Test;Password=temp"
providerName="System.Data.SqlClient" />
根据帐户名称中的反斜杠,我怀疑您正在尝试在连接字符串中使用windows帐户。有两种登录方式可以连接到SQL Server:
- 在Active Directory中管理并被授权访问SQL Server实例的Windows登录。
- 在SQL Server管理工作室中管理和授权的SQL Server认证登录。
在连接字符串中,您可以选择使用Windows身份验证(Integrated Security=SSPI
,也可以使用true
而不是SSPI
)。这意味着应用程序将使用进程运行时使用的帐户连接到SQL Server。这种身份验证方法的最大优点是不必在连接字符串中存储凭据。另一方面,更改所使用的帐户的唯一方法是让应用程序在另一个帐户下运行(或者在每次连接到SQL Server时在应用程序中进行模拟)。因此没有办法在连接字符串中设置另一个Windows帐户。
如果您想使用SQL Server认证帐户,您必须在连接字符串(User Id=MyUserName;Password=MyPassword
)中添加凭据。您只能使用已在尝试连接的SQL Server实例上创建并被授予访问权限的帐户。默认情况下,SQL Server实例被配置为只允许Windows身份验证,因此您可能需要首先启用SQL身份验证。
请注意,SQL Server身份验证登录不能包含反斜杠-这就是我假设您希望在连接字符串中使用Windows帐户的凭据的原因,因为用户名包含反斜杠。
那么如何解决这个问题呢?
- 如果你想使用Windows帐户,让你的应用程序在这个帐户下运行。由于它是一个WCF应用程序,如果在IIS中托管它,则必须更改应用程序池帐户。设置您的连接字符串为:
Data Source=SVRName;Initial Catalog=db;Integrated Security=SSPI
. - 如果您不想更改应用程序运行的帐户,请在SQL服务器上创建一个SQL Server身份验证登录并授予其对相关数据库的访问权限。设置连接字符串中的凭据:
Data Source=SVRName;Initial Catalog=db;User ID=SQLAuthLogin;Password=SQLAuthPwd
.
尝试将集成安全=false添加到您的连接字符串:
<add name="GISDBConnectionString" connectionString="Data Source=SVRName;Initial Catalog=db;Integrated Security=False;User ID=GLOBAL'Test;Password=temp"
providerName="System.Data.SqlClient" />