WCF服务无法登录到远程数据库

时间:2011-08-15 15:03:21

标签: .net wcf sql-server-2008 c#-4.0

我有一个托管在Windows服务中的WCF服务。此Windows服务设置为以LocalSystem身份运行。此WCF尝试登录到远程SQL Server 2008 Express数据库,但登录失败。

异常错误说明:

  

无法打开登录请求的数据库\“{database name} \”。登录失败。用户'{domain name} \ {machine name} $'登录失败。

我已经用标签替换了数据库,域名和机器名,但你明白了。

知道我如何解决这个问题吗?我想将此用户添加到SQL Server登录,但我在其属性中找不到此用户。

3 个答案:

答案 0 :(得分:3)

我建议在sql server上创建一个新的用户帐户,然后从你的Windows服务模拟该帐户。

WindowsIdentity类有许多构造函数,您可以使用它们来创建您希望SQL服务器允许登录的用户的WindowsIdentity(http://msdn.microsoft.com/en-us/library/e599ywa6.aspx)。

您是否尝试使用WindowsIdentity.Impersonate方法将线程用户更改为SQL Server识别为有效用户的用户?

我相信您会将代码模拟为由Windows服务托管的服务类中的用户,而不是访问该服务的客户端代码。

有关详情和示例,请参阅:http://msdn.microsoft.com/en-us/library/w070t6ka.aspx

将登录信息存储在加密的应用配置文件中。在服务项目下创建一个app.config文件。在该文件中添加敏感信息的部分(最初以纯文本形式),并保存ecnrypt文件。

详细信息:http://msdn.microsoft.com/en-us/library/89211k9b(v=VS.100).aspx 并在此处进行一次演练:http://weblogs.asp.net/jgalloway/archive/2008/04/13/encrypting-passwords-in-a-net-app-config-file.aspx

答案 1 :(得分:1)

消息

'The login failed. Login failed for user '{domain name}{machine name}$'

表示您的服务正在尝试使用运行它的计算机的NETWORK SERVICE帐户连接到数据库。

如果您在域上创建服务帐户,请将服务更改为“以该方式运行”此用户,并授予服务帐户访问您的数据库的权限,这可以解决您的问题。

答案 2 :(得分:0)

为什么不为此程序创建自定义SQL Server登录?这样,运行服务的人无关紧要,您将获得一致的结果。

相关问题