Sql server 使用带有服务的本地系统连接到SQL Server会引发错误18456,状态38

Sql server 使用带有服务的本地系统连接到SQL Server会引发错误18456,状态38,sql-server,service,connection-string,local-system-account,Sql Server,Service,Connection String,Local System Account,事实: 如果我使用一个普通的域用户XYZ,“以”身份登录,那么服务就可以正常工作,这意味着数据库存在并且连接字符串良好 如果我使用本地服务,我会得到错误18456,状态38 我已经创建了\$登录帐户 我已授予与XYZ相同的\$权限,包括用户到数据库的映射、服务器角色、安全性和状态 我的连接字符串是: "SERVER=localhost;DATABASE=<TARGET_DATABASE>;TRUSTED_CONNECTION=True;Persist Security

事实:

  • 如果我使用一个普通的域用户XYZ,“以”身份登录,那么服务就可以正常工作,这意味着数据库存在并且连接字符串良好
  • 如果我使用本地服务,我会得到错误18456,状态38
  • 我已经创建了
    \$
    登录帐户
  • 我已授予与XYZ相同的
    \$
    权限,包括用户到数据库的映射、服务器角色、安全性和状态
我的连接字符串是:

"SERVER=localhost;DATABASE=<TARGET_DATABASE>;TRUSTED_CONNECTION=True;Persist Security Info=False;"
“服务器=本地主机;数据库=;可信连接=True;持久安全信息=False;”
错误消息显示:

Login failed for user '<DOMAIN>\<MACHINE>$'. Reason: Failed to open the explicitly specified database '<TARGET_DATABASE>'. [CLIENT: <local machine>]
用户“\$”登录失败。原因:无法打开显式指定的数据库“”。[客户:]
注意:在上面:
[CLIENT::
是实际文本,不是替代文本

其他注意事项


这来自通过WIX安装程序安装的网站。安装程序安装了该服务,我可以选择要使用的帐户,目前它使用的是“本地系统”,但如果这是一种不好的做法,我们可以更改它,但看起来每个其他服务(SQL服务除外)都使用相同的模式。

您添加了登录名,但似乎忘记了将用户添加到数据库中,因此,无法打开请求的数据库消息。@DanGuzman否,用户已附加到数据库。它出现在Security/Users列表中可以连接的数据库的正上方缺少用户是“无法打开显式指定的数据库”消息的常见原因。另一个原因是连接字符串中的db名称输入错误。@DanGuzman谢谢。连接字符串中的dbname不会在可以登录的用户和不能登录的系统帐户之间更改,因此dbname不能是罪魁祸首。此外,本地系统用户\$作为登录和数据库上的用户存在。