无法使用帐户从WCF服务连接到SQL Server

时间:2014-03-11 14:22:20

标签: c# sql sql-server wcf

我正在尝试从wcf服务连接到sql server。使用集成安全性,它工作正常但是当我使用帐户时,它失败了。我可以使用此帐户连接到sqL服务器管理工​​作室。我不确定我缺少什么,是否需要其他提供商来进行访问。感谢任何反馈。

<add name="GISDBConnectionString" connectionString="Data Source=SVRName;Initial Catalog=db;User ID=GLOBAL\Test;Password=temp"
providerName="System.Data.SqlClient" />

2 个答案:

答案 0 :(得分:1)

根据您帐户名称中的反斜杠,我怀疑您正在尝试在连接字符串中使用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 Server上创建SQL Server身份验证登录,并授予其访问相关数据库的权限。在连接字符串中设置凭据:Data Source=SVRName;Initial Catalog=db;User ID=SQLAuthLogin;Password=SQLAuthPwd

答案 1 :(得分:0)

尝试将Integrated Security = false添加到连接字符串中:

<add name="GISDBConnectionString" connectionString="Data Source=SVRName;Initial       Catalog=db;Integrated Security=False;User ID=GLOBAL\Test;Password=temp"
 providerName="System.Data.SqlClient" />