配置 IIS、ASP.NET 和 SQL Server






4.93/5 (38投票s)
本文是一篇更新的文章,讨论了 IIS、ASP.NET 和 SQL Server 的配置。
引言
首先说明:本文基于我的个人经验撰写。它仅应作为 **指南** 使用,不建议用于生产环境。您可以借助本文了解基本设置步骤,以使其正常运行。
出于演示目的,我将使用 Microsoft Windows 10 Pro、Microsoft IIS 和 Microsoft SQL Server 2014。如果您使用的是 SQL Server 的 Express 版本,这些步骤应仍然适用,但我不能保证本文中的所有内容都能在您的环境中找到。
很抱歉没有添加任何截图,但我将在稍后添加。 :) 请关注此页面。
IIS Express 与 IIS
自 Visual Studio 2012 起,Microsoft 推出了一个轻量级的 IIS 版本,称为 IIS Express。通常,在开发应用程序或网站时,您可以使用调试器 (F5) 运行解决方案,然后捕获错误。虽然这是测试解决方案的一种非常便捷的方式,但我喜欢在开发周期中“模拟”真实场景。这样,我最终就能以普通用户遇到错误的方式来发现和处理错误。因此,我选择使用完整托管版本的 IIS,而不是 Express 版本。
系统要求
本文要求您
- 已安装 Microsoft SQL Server 及所有相关服务。
- 已安装 Microsoft IIS
- 对于 Windows 客户端版本:打开“控制面板”->“程序和功能”->“启用或关闭 Windows 功能”。
- 对于 Windows 服务器版本:打开“服务器管理器”->“添加角色和功能”(开发目的不需要 IIS 托管核心)。
配置 IIS
请记住,这些设置仅用于开发/内部使用,而非生产使用。您 **可以** 将其作为指南,但必须根据您的设置/需求进行相应修改。
- 打开 IIS 管理控制台(快捷方式:开始 -> 运行 -> inetmgr)。
- 在左侧选择 **应用程序池**,然后在中间找到您的网站/应用程序正在运行的应用程序池。右键单击,然后选择“高级设置”。
- 确保 **托管管道模式** 设置为 *集成*。我们不再使用经典管道,除非您知道自己在做什么!
- 在列表中向下滚动,直到看到 **标识** 设置。单击 **...** 按钮,然后选择您要使用的帐户。在本文中,我们将使用 **网络服务** 帐户,它能提供您所需的所有权限,同时又不会过度暴露您的系统。请仔细阅读有关网络服务帐户和其他可用帐户的信息。*如果您的系统连接到 AD,您可能需要咨询您的系统管理员寻求帮助。根据我的经验,我曾经使用过不允许网络服务帐户使用的 AD 计算机。*
- 现在单击 **确定**,然后再次单击 **确定**。您已配置好应用程序池。
- 在左侧展开 **网站**,然后 **选择** 您需要配置的网站/应用程序。
- 双击“**身份验证**”磁贴。请确保
- 匿名身份验证已 **启用**,其余 **禁用**。*这也是基于您的需求,可能与此处不同。*
- 右键单击 **匿名身份验证**,然后选择*编辑*。
- 将身份更改为“*应用程序池标识*”。
- 双击“**身份验证**”磁贴。请确保
上面的步骤应该可以使您的应用程序/网站在 IIS 中正常工作。您可能还无法访问它,请继续阅读文章的其余部分。
目录权限
按照标准做法,我们所有的网站/应用程序(从现在起统称为“站点”)都放置在默认的 IIS 托管目录中,即 *C:\wwwroot\inetpub*。
- 使用 Windows 资源管理器转到托管目录。
- 右键单击站点的文件夹,然后选择 **属性**。
- 在 *安全* 选项卡中,授予您在 IIS 中选择的帐户(对我来说是 NetworkService)以下权限。如果该帐户不在列表顶部,请先添加它。
- 修改
- 读取和执行
- 列出文件夹内容
- 读取
- Write
**注意**:您可能需要考虑使用高级安全编辑器来启用安全对象到所有子项的传播。这可以确保在根目录中创建的任何新文件或目录都继承其父对象的权限。这会使一切都变得更简单——对于本文,我们实际上不需要它,所以不会详细讨论。如果您有疑问,请随时留言,我会回复。
配置 SQL Server
至此,您会发现您的站点无法访问或与数据库引擎通信。为什么?因为它没有必要的权限。现在有两种方法可以做到这一点,每种方法都有其优点和缺点;简而言之:
- 仅数据库访问:您可以配置系统帐户(NETWORK SERVICE)仅访问指定的数据库。在这种情况下,该帐户将被允许与指定的数据库进行通信。我认为这在安全性方面提供了一些额外的保障。这通常是我偏好的方法。我喜欢限制人们和软件做他们不应该做的事情。
- 服务器范围访问:您可以配置系统帐户(NETWORK SERVICE)访问整个数据库服务器,包括附加到该实例/引擎的所有数据库。这种方法不像上面提到的那样安全,我强烈不建议使用。
仅数据库访问
如果您选择此方法,您需要考虑到每次添加新数据库时,都必须去为该数据库配置权限。如果您需要每周配置数据库权限,这可能会变得非常繁琐。
- 打开 SQL Server Management Studio(快捷方式:开始 -> 运行 -> ssms)
- 出现提示时连接。
- 展开 **安全性**,然后展开 **登录名**。
- 如果您没有看到网络服务列出(应该是 `NT AUTHORITY\NETWORK SERVICE`)
- 右键单击“登录名”文件夹,然后选择 **新建登录名**。
- 在顶部的“登录名”字段中,输入 `NETWORK SERVICE`。如果它拒绝接受,请尝试输入 `NT AUTHORITY\NETWORK SERVICE`。
- 现在在左侧选择 **服务器角色** 选项卡。
- 您可以勾选任何角色,但对我来说,我将赋予它“public”访问权限。
- 现在在左侧选择 **用户映射** 选项卡。
- 勾选所有您想允许此服务帐户访问的数据库。
- 在每个选定的数据库的“架构”列中,将值设置为 **dbo**(或您在数据库中使用的任何架构)。
- 然后,一次选择一个数据库行,并为其设置以下权限:
db_datareader
db_datawriter
public
- 现在单击 **确定**。
- 如果您已经列出了网络服务帐户,请编辑该登录项,然后按照上述步骤(5-9)进行操作。
以上是关于引擎级别的设置。您仍然需要将服务帐户添加到您最初在步骤 6 中选择的每个数据库中。所以:
- 在左侧展开 **数据库**。
- 展开 **安全性** 文件夹,然后展开 **用户**。
- 服务帐户 *应该* 在那里列出。右键单击服务帐户(对我们来说是 `NT AUTHORITY\NETWORK SERVICE`)并选择 **属性**。
- 在左侧选择 **可公开访问的项** 选项卡。
- 单击 **搜索** 按钮。
- 选择“特定对象”并单击确定。
- 现在单击 **对象类型** 按钮。
- 向下滚动并勾选 **架构**。单击确定。
- 在下面的文本框中,输入您要授予访问权限的架构(与第 7 步相同)。在本例中,它是 **dbo**。单击确定。
- 在底部,选择您要授予该数据库的所有权限。在我的例子中,我需要对我的数据库拥有相当广泛的访问权限,所以我将选择这些权限:
- ALTER
- Control
- CREATE SEQUENCE
- 删除
- Execute
- Insert
- 参考文献
- Select
- 更新
- 现在单击 **确定**。
为每个您选择的数据库重复以上步骤。
服务器范围访问
- 打开 SQL Server Management Studio(快捷方式:开始 -> 运行 -> ssms)
- 出现提示时连接。
- 展开 **安全性**,然后展开 **登录名**。
- 如果您没有看到网络服务列出(应该是 `NT AUTHORITY\NETWORK SERVICE`)
- 右键单击“登录名”文件夹,然后选择 **新建登录名**。
- 在顶部的“登录名”字段中,输入 `NETWORK SERVICE`。如果它拒绝接受,请尝试输入 `NT AUTHORITY\NETWORK SERVICE`。
- 现在在左侧选择 **服务器角色** 选项卡。
- 您可以勾选任何角色,但对我来说,我将赋予它“public”访问权限。
- 点击**确定**。
以上就是引擎级别的设置。
历史
- 2013/10/28:改进了 IIS 配置说明,使其更有效、更详细。包含 IIS 8.0 和 8.5。
- 2015/10/21:改进了文章。