代码之家  ›  专栏  ›  技术社区  ›  Brij

连接ASP.NET应用程序的SQL Server(Windows身份验证与SQL Server身份验证)的最佳方法

  •  13
  • Brij  · 技术社区  · 14 年前

    我有一个数据库和一个有表单认证的站点。它与VS2008一起工作正常。这次,我使用的是“可信连接=真”。但当它从外部或直接从浏览器打开时,我会收到错误“登录失败,用户‘NT授权\匿名登录’”。

    我知道这是由于许可。SQL Server基于Windows身份验证。

    • 管理用户连接SQL Server的最佳方法是什么?
    • 我应该启用SQL Server身份验证吗?

    让我知道该怎么做,这样可以让生产感觉良好,并且在部署期间不会出现任何问题。

    注意:SQL Server安装在域服务器上。

    3 回复  |  直到 10 年前
        1
  •  11
  •   Remus Rusanu    14 年前

    站点身份验证与ASP和SQL之间的身份验证无关。“窗体身份验证”实际上不是真正的身份验证形式,只是ASP.NET应用程序的角色和成员身份,与安全基础结构无关。

    从Visual Studio运行站点时,您将使用自己的帐户启动Visual Studio Web服务器,并且此Web服务器将使用NTLM/Kerberos作为您的身份验证到SQL Server,因为它是在您的凭据下运行的。

    当您从浏览器访问站点时,您的站点是从具有所述应用程序池标识的IIS应用程序池运行的,该应用程序池通常是名为iuser_uu…使用NTLM/Kerberos与SQL Server进行身份验证时,此本地用户将作为匿名用户进行身份验证,因为本地帐户在承载SQL Server的远程计算机/域上没有意义。

    解决方案是将应用程序池标识更改为可以通过SQL Server进行精细身份验证的用户。为此,必须将IIS主机加入到与SQL Server主机(或信任SQL Server主机域的域)相同的域中,并且必须将应用程序池标识更改为此域中的帐户。因此,如果SQL Server计算机在加入域foo的计算机上运行,则:

    • 确保将IIS计算机连接到foo
    • 创建域用户foo\mywebapp
    • 将应用程序池标识更改为foo\mywebapp
    • 为foo\mywebapp添加SQL登录
    • 在SQL中向foo\mywebapp授予必要的权限

    使用SQL身份验证的另一种选择是错误的,原因有几个(可能在web.config中公开密码,也可能在网络上进行身份验证时公开密码)。如果IIS主机未加入域,则 可以 使用镜像帐户(在IIS主机和SQL主机上具有相同名称和密码的本地帐户),但这也有缺陷:无法使用Kerberos,必须在两台主机上保持帐户密码同步等。

        2
  •  2
  •   DOK    14 年前

    一种方法是为要使用的应用程序创建服务帐户。您可以在Active Directory或类似目录中创建帐户。在IIS中,将应用程序池设置为在该服务帐户下运行。在SQL Server中,直接或通过将服务帐户置于角色中来授予服务帐户的权限。

    这是一篇关于 how to do that .

        3
  •  2
  •   Rasika Godawatte    10 年前

    在SQL Server计算机和Web服务器(IIS)计算机所属或信任的域中创建托管服务帐户。然后在托管服务帐户上运行Web服务器的应用程序池。使用托管服务帐户创建SQL Server登录。有关创建托管服务帐户的详细信息,请阅读以下TechNet文章;

    http://technet.microsoft.com/en-us/library/dd548356(v=ws.10).aspx