为asp.net应用程序连接sql server(Windows身份验证与SQL Server身份验证)的最佳方式

问题描述:

我有一个数据库和一个网站具有表单身份验证。它与VS2008工作正常。这一次,我正在使用“Trusted_connection = True”。但是,当它从外部或直接从浏览器打开,然后我得到错误“登录失败,用户'NT AUTHORITY \ ANONYMOUS LOGON'。”为asp.net应用程序连接sql server(Windows身份验证与SQL Server身份验证)的最佳方式

我知道这是由于权限。 SQL服务器基于Windows身份验证。

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

让我知道该怎么做才能让生产感受,并且在部署过程中不会有任何问题。

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

+0

什么**版本的SQL Server **? 2000年,2005年,2008年? – 2010-03-12 16:52:53

+0

Sql server 2005 – Brij 2010-03-13 05:52:23

网站身份验证与ASP和SQL之间的身份验证无关。 “表单身份验证”实际上不是一种真正的身份验证形式,只是ASP.Net应用程序的一个角色和成员资格,与安全基础结构无关。

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

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

解决方案是将应用程序池标识更改为可以使用SQL Server进行身份验证的用户。为此,必须将IIS主机连接到与SQL Server的主机(或信任SQL Server主机计算机域的域)相同的域,并且必须将该应用程序池标识更改为该域中的帐户。因此,如果SQL Server机器一台机器上运行,加入到域FOO,那么:

  • 确保IIS机器连接到富
  • 创建一个域用户FOO \ MyWebApp
  • 变化的应用程序池身份FOO \ MyWebApp
  • 添加SQL登录为FOO \ MyWebApp
  • 授予必要的权限在SQL中FOO \ MyWebApp

替代使用SQL身份验证的原因有几个原因(可能会暴露Web中的密码)。配置,在线路验证期间可能暴露密码)。如果IIS主机没有加入域,那么你可以使用使用镜像帐户(在IIS主机和SQL主机上使用相同名称和密码的本地帐户),但也有缺陷:无法与Kerberos一起使用,帐户密码有在两台主机上保持同步等。

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

这里有一篇关于how to do that的文章。

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

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