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

Bri*_*rij 15 database sql-server asp.net configuration connection-string

我有一个数据库和一个具有表单身份验证的站点.它与VS2008一起工作正常.这次,我使用"Trusted_connection = True".但是当它从外部打开或直接从浏览器打开时,我收到错误"用户登录失败'NT AUTHORITY\ANONYMOUS LOGON'."

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

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

让我知道该怎么做才能让生产感觉到并且在部署期间不会有任何问题.

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

Rem*_*anu 12

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

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

当您从浏览器访问该站点时,您的站点正在从具有所述应用程序池标识的IIS应用程序池运行,该应用程序池通常是名为IUSER _...的本地用户.当使用NTLM/SQL Server进行身份验证时,此本地用户Kerberos将作为匿名用户进行身份验证,因为本地帐户在托管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,帐户密码必须是在两个主机上保持同步等