0

我开发了一个 Windows 服务,它在注册表中存储和检索其 MSSQL 连接字符串。但是,我遇到的情况是,当我的服务尝试连接从注册表中检索到的字符串时,它公然忽略了指定的 UID 和 PWD。

然后我将应用程序编译并作为控制台应用程序运行,并且很自然地工作,因为控制台应用程序是使用我自己的用户帐户的权限运行的,而服务是使用本地系统帐户运行的。当我指定该服务应以我自己的用户帐户运行时,该服务成功连接到数据库。

我的结论是,当从注册表中检索应用程序时,出于某种原因,它会执行以下一项或两项操作:

  • 忽略指定的 UID 和 PWD。
  • 自动假定连接应在受信任模式下进行 (Trusted_Connection=true)

值得一提的是,我确实在注册表中存储的连接字符串中指定了 Trusted_Connection=false。

这是我的连接字符串:

SERVER=.\SQLEXPRESS;DATABASE=mydb;UID=myid;PWD=mypwd

有没有人能够阐明这个问题?我非常希望能够利用存储在我的连接字符串中的用户 ID 和密码。

4

2 回答 2

1

检查是否为标准安全配置了 SQL,因为指定用户名和密码将使用未集成的标准安全。因此,您不能使用 Windows 帐户以这种方式访问​​数据库。

另一种通常首选的方法是将您的服务作为 Windows 帐户运行并使用集成安全性进行访问。

http://msdn.microsoft.com/en-us/library/aa266913(v=vs.60).aspx

于 2012-12-10T14:33:47.363 回答
1

我认为您打开了 SQL Server 身份验证?

使用集成身份验证(推荐),您需要将服务运行方式帐户更改为具有 SQL Server 登录名的帐户。

IE

  • 打开 Trusted_connection。只是......不要关闭它。
  • 创建用户 DOMAIN\USR_MYSERVICE。
  • 向该帐户授予适当的计算机和数据库权限。
  • 将服务设置为以该帐户运行。
于 2012-12-10T14:33:59.287 回答