C# can';t使用帐户从WCF服务连接到SQL Server

C# can';t使用帐户从WCF服务连接到SQL Server,c#,sql,sql-server,wcf,C#,Sql,Sql Server,Wcf,我正在尝试从wcf服务连接到sql server。使用集成安全性,它可以正常工作,但当我使用帐户时,它失败了。我可以使用此帐户连接到sqL server management studio。我不确定我遗漏了什么,我是否需要另一个提供商来访问。感谢您的反馈 <add name="GISDBConnectionString" connectionString="Data Source=SVRName;Initial Catalog=db;User ID=GLOBAL\Test;Password

我正在尝试从wcf服务连接到sql server。使用集成安全性,它可以正常工作,但当我使用帐户时,它失败了。我可以使用此帐户连接到sqL server management studio。我不确定我遗漏了什么,我是否需要另一个提供商来访问。感谢您的反馈

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

尝试在连接字符串中添加integratedsecurity=false:

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

根据您帐户名中的反斜杠,我怀疑您试图在连接字符串中使用windows帐户。有两种登录可以连接到SQL Server:

  • 在Active Directory中管理并有权访问SQL Server实例的Windows登录
  • 在SQL Server management studio中管理和授权的SQL Server身份验证登录
在连接字符串中,您可以选择使用Windows身份验证(
integratedsecurity=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;初始目录=db;集成安全性=SSPI
  • 如果不想更改应用程序运行时使用的帐户,请在SQL Server上创建一个经过SQL Server身份验证的登录名,并授予其对相关数据库的访问权限。在连接字符串中设置凭据:
    Data Source=SVRName;初始目录=db;用户ID=SQLAuthLogin;密码=SQLAuthPwd

您是否将Windows凭据添加到连接字符串中,或者是
用户ID=GLOBAL\Test;Password=temp
SQL Server身份验证帐户?您得到的确切错误是什么?错误消息是什么?此用户是经过sql server身份验证的帐户。我收到错误消息:“用户'GLOBAL\\Test'登录失败”。stringJuat添加以下内容可以正常工作。用户名真的包含反斜杠吗?我无法使用反斜杠创建SQL Server身份验证帐户(另请参见参数login\u name)。但是,连接字符串中的
用户Id
只接受SQL Server身份验证的帐户。错误指向凭据无效的方向。我添加了,但这没有任何区别。我也犯了同样的错误。感谢JayNote,如果您将登录/密码凭据添加到连接字符串中,还必须将
integratedsecurity=false
(或者干脆将其从连接字符串中完全删除)。