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

Posted

技术标签:

【中文标题】为 asp.net 应用程序连接 sql server(Windows 身份验证与 SQL Server 身份验证)的最佳方式【英文标题】:the best way to connect sql server (Windows authentication vs SQL Server authentication) for asp.net app 【发布时间】:2011-01-26 19:54:12 【问题描述】:

我有一个数据库和一个具有表单身份验证的站点。它在 VS2008 上运行良好。这一次,我使用的是“Trusted_connection =True”。但是当它从外部或直接从浏览器打开时,我收到错误“用户'NT AUTHORITY\ANONYMOUS LOGON'登录失败。”

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

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

让我知道该怎么做才能使生产感觉良好,并且在部署过程中不会出现任何问题。

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

【问题讨论】:

SQL Server 的版本是什么? 2000 年、2005 年、2008 年 ?? 【参考方案1】:

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

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

当您从浏览器访问该站点时,您的站点正在以所述应用程序池的身份从 IIS 应用程序池运行,通常是一个名为 IUSER_ 的本地用户...这个本地用户,在使用 SQL Server 进行身份验证时使用 NTLM/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 ,帐户密码必须在两台主机等上保持同步。

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

以上是关于为 asp.net 应用程序连接 sql server(Windows 身份验证与 SQL Server 身份验证)的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core SQL 连接超时

.NET / LINQ-SQL / ASP.NET 中的连接字符串地狱

ASP.NET 应用程序连接字符串和 SQL Server 安全/权限

ASP.net 连接sql 2008 的问题

使用受信任连接时,哪个帐户用于向 SQL 验证 ASP.net?

ASP.NET MVC:使用 Visual Studios for Mac 连接 SQL 数据库