连接SQL Server的最佳方式(Windows身份验证 vs SQL Server身份验证)用于ASP.NET应用程序。

15

我有一个数据库和一个使用表单认证的站点。在VS2008中工作良好。这次,我正在使用“Trusted_connection =True”。但当从外部或直接从浏览器打开它时,我会收到错误消息“登录失败,用户为“NT AUTHORITY\ANONYMOUS LOGON”。

我知道这是权限问题。SQL Server基于Windows身份验证。

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

请告诉我我该怎么做,以使其具有生产感,并在部署期间不会出现任何问题。

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


SQL Server 的版本是什么?2000、2005、2008? - marc_s
3个回答

13
网站认证与ASP和SQL之间的认证无关。'表单身份验证'实际上不是真正身份验证的一种形式,只是ASP.Net应用程序的角色和成员,与安全基础设施无关。
当您从Visual Studio运行网站时,您将在自己的帐户下启动Visual Studio Web服务器,此Web服务器将使用NTLM / Kerberos作为您进行身份验证,因为它以您的凭据运行。
当您从浏览器访问网站时,您的网站将使用所述应用程序池的标识在IIS应用程序池中运行,该标识通常是名为IUSER_...的本地用户。当该本地用户使用NTLM / Kerberos进行身份验证时,将作为匿名用户进行身份验证,因为本地帐户在托管SQL Server的远程计算机/域上没有意义。
解决方法是将应用程序池标识更改为可以很好地与SQL Server进行身份验证的用户。为此,IIS托管机器必须加入与SQL Server主机机器相同的域(或信任SQL Server主机机器域的域),并且必须将应用程序池标识更改为来自此域的帐户。因此,如果SQL Server机器运行在加入了FOO域的机器上,则:
- 确保IIS机器已加入FOO - 创建域用户FOO \ MyWebApp - 将应用程序池标识更改为FOO \ MyWebApp - 为FOO \ MyWebApp添加SQL登录 - 授予FOO \ MyWebApp在SQL中必要的权限
使用SQL身份验证的替代方法的缺点有很多(可能会在web.config中暴露密码,在传输期间进行身份验证时可能会暴露密码)。如果IIS托管机器未加入域,则可以使用镜像帐户(在IIS主机和SQL主机上具有相同名称和密码的本地帐户),但这也存在缺陷:无法与Kerberos一起使用,帐户密码必须在两个主机上保持同步等。

2
在SQL服务器和Web服务器(IIS)所属的域或信任关系中创建托管服务帐户。然后将Web服务器应用程序池运行在托管服务帐户上。使用托管服务帐户创建SQL Server登录。阅读以下Technet文章以获取有关创建托管服务帐户的更多信息;

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


2

一种方法是创建一个服务帐户供应用程序使用。您可以在Active Directory或类似系统中创建该帐户。在IIS中,将应用池设置为在该服务账户下运行。在SQL Server中,直接向服务帐户授予权限或将其放入角色中以授予权限。

以下是有关如何执行此操作的文章


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接