【问题标题】:SQL integrated security using computer name instead of user name使用计算机名而不是用户名的 SQL 集成安全性
【发布时间】:2011-10-09 08:22:27
【问题描述】:

我正在尝试对同一网络上的 SQL Express 实例进行身份验证,并使用我的域用户进行身份验证。它适用于 SSMS 中的 Windows 身份验证。我验证我可以使用 MyDB 数据库,包括编辑表格。

但是,当我尝试以下连接字符串时:

Server=ipaddress\SQLExpress; Database=MyDB; Integrated Security=SSPI;

我得到一个错误:

Cannot open database "MyDB" requested by the login. The login failed. Login failed for user 'ROMANIA\MONSTER2$'

问题是 MONSTER2 是我的计算机名称,而不是我的用户名。 (ROMANIA 是域。)我做错了什么?

[编辑] 我忘记了一些可能相关的内容:我正在尝试从我的计算机上运行的网络服务打开连接。

【问题讨论】:

  • 您需要将您的网络服务配置为以命名使用方式运行(而不是本地机器,因为它看起来是)
  • 真是个烦人的怪癖。感谢您发布这个问题。帮了我一把。

标签: .net sql authentication connection-string


【解决方案1】:

这是因为您的网络服务器未设置为使用使用该服务的人的身份,而是使用运行它的计算机的身份。

检查您的 web 服务的 web.config 是否包含:<authentication mode="Windows" />

【讨论】:

  • 呃!你是对的。作为记录,我必须去 IIS 并更改应用程序池(在高级设置中)以使用我的身份而不是默认的 ApplicationPoolIdentity。我会在 9 分钟内接受答案:)
【解决方案2】:

您的网络服务正在NT AUTHORITY\Network Service 安全上下文下运行。这将导致进程在访问域中的网络资源时使用主机的机器帐户

您必须配置网络服务以使用您的域身份运行。

如果您在 IIS 中托管您的 Web 服务,您可以通过 impersonation 执行此操作。这是一个例子:

<configuration>
    <system.web>
        <identity
            impersonate="true"
            userName="ROMANIA\username" 
            password="********" />
    </system.web>
</configuration>

【讨论】:

  • 再一次,我遇到了选择将哪个答案标记为已接受的问题。我会选择这个,抱歉 Raj。不过,我对这两个答案都投了赞成票。
【解决方案3】:

在我的情况下,我需要同时做这两件事:

<authentication mode="Windows" />
    <authorization>
        <deny users="?" />
    </authorization>
<identity impersonate="true" />

【讨论】:

    【解决方案4】:

    我遇到了同样的问题,并且出于类似的原因。 (脸红)。

    尽管我正确设置了我的应用程序池以使用服务帐户凭据而不是 LocalService/NetworkService 等,但由于某种原因,应用程序本身并没有使用该应用程序池。它被设置为 DefaultAppPool。如果继续认为 IIS 设置正确,很容易错过。

    【讨论】:

      【解决方案5】:

      检查托管在 IIS 上的应用程序是否在正确的应用程序池而不是 DefaultAppPool 下运行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-24
        • 1970-01-01
        • 2010-10-02
        • 1970-01-01
        • 1970-01-01
        • 2021-04-06
        • 2015-10-28
        相关资源
        最近更新 更多