将成员身份数据库部署到企业环境
作者 :Jason Lee
注意
自本文撰写以来,ASP.NET 成员资格提供程序已被 ASP.NET Identity 取代。 强烈建议更新应用以使用 ASP.NET 标识 平台,而不是本文撰写时提供的成员资格提供程序。 与 ASP.NET 成员身份系统 ASP.NET 标识具有许多优势,包括:
- 性能更好
- 改进了扩展性和可测试性
- 支持 OAuth、OpenID Connect 和双因素身份验证
- 基于声明的标识支持
- 与 ASP.Net Core 更好的互操作性
本主题介绍在测试、过渡或生产环境中预配 ASP.NET 应用程序服务数据库 (通常称为成员资格数据库) 时需要克服的关键注意事项和挑战。 它还介绍了可用于应对这些挑战的方法。
本主题是一系列教程的一部分,这些教程基于名为 Fabrikam, Inc 的虚构公司的企业部署要求。本教程系列使用示例解决方案( Contact Manager 解决方案)来表示具有实际复杂程度的 Web 应用程序,包括 ASP.NET MVC 3 应用程序、Windows Communication Foundation (WCF) 服务和数据库项目。
这些教程的核心部署方法基于了解项目文件中所述的拆分 项目文件方法,其中生成过程由两个项目文件控制,一个项目文件包含适用于每个目标环境的生成说明,另一个包含特定于环境的生成和部署设置。 在生成时,特定于环境的项目文件将合并到与环境无关的项目文件中,形成一组完整的生成指令。
部署成员资格数据库时存在哪些问题?
在大多数情况下,在为数据库设计部署策略时,首先需要考虑要部署的数据。 在开发或测试环境中,可能需要部署用户帐户数据,以便快速轻松地进行测试。 在过渡或生产环境中,你不太可能想要部署用户帐户数据。
遗憾的是,ASP.NET 成员身份数据库引入了一些特定的挑战,使此决策更加复杂:
- 仅架构部署将使成员身份数据库处于非操作状态。 这是因为成员资格数据库在 aspnet_SchemaVersions 表中包含一些配置数据 (,) 数据库需要这些数据才能正常运行。 因此,如果对成员身份数据库执行仅限架构的部署以排除用户帐户数据,则需要运行部署后脚本来添加基本配置数据。
- 根据成员身份数据库的配置方式,成员资格提供程序可能会使用计算机密钥来加密密码并将其存储在数据库中。 在这种情况下,使用数据库部署的任何用户帐户数据都将在目标服务器上不可用。 出于此原因,不支持部署用户帐户数据的方案。
选择成员身份数据库策略
选择如何在企业服务器环境中预配成员身份数据库时,请使用以下准则:
- 尽可能不要部署成员资格数据库。 而是在目标数据库服务器上手动创建成员身份数据库。 如果尚未自定义成员资格数据库架构,只需使用 ASP.NET SQL Server 注册工具 (aspnet_regsql.exe) 在目标上原地创建一个新架构。
- 如果别无选择,只能部署成员身份数据库(例如,如果对数据库架构进行了大量修改),则应对成员身份数据库执行仅限架构的部署,以排除用户帐户数据,然后运行部署后脚本以添加任何所需的配置数据。 可以在 如何:在不包括用户帐户的情况下部署 ASP.NET 成员资格数据库中找到有关这些方法的广泛指导。
请务必记住 ,成员资格数据库的架构可能相当静态。 即使你已自定义成员资格数据库,也不太可能需要定期更新架构-它不会以与 Web 应用程序或数据库项目中的代码相同的频率更改。 因此,无需在任何自动化或单步部署过程中包括成员资格数据库。
使用 VSDBCMD 更新成员资格数据库架构
如果在首次部署后修改成员资格数据库的结构,则可能不希望使用 Internet Information Services (IIS) Web 部署工具 (Web 部署) 重新部署数据库。 Web 部署中的数据库部署功能不包括对目标数据库进行差异更新的功能,相反,Web 部署必须删除并重新创建数据库。 这意味着会丢失任何现有用户帐户数据,这在过渡或生产环境中通常是不需要的。
另一种方法是使用 VSDBCMD 实用工具更新目标数据库的架构。 VSDBCMD 包括两个重要功能。 首先,它可以将现有数据库的架构导入到 .dbschema 文件中。 其次,它可以将 .dbschema 文件作为差异更新部署到现有数据库,这意味着它仅执行使目标数据库更新所需的更改,并且不会丢失任何数据。
可以使用以下高级步骤更新成员资格数据库架构:
- 使用 VSDBCMD 导入 操作为源成员资格数据库生成 .dbschema 文件。 如何 :从命令提示符导入架构中介绍了此过程。
- 使用 VSDBCMD 部署 操作将 .dbschema 文件部署到目标成员资格数据库。 VSDBCMD.EXE (部署和架构导入的命令行参考) 中介绍了此过程。
结论
本主题介绍了需要在各种目标环境中预配 ASP.NET 成员身份数据库时可能遇到的一些挑战。 具体而言,它解释了为什么仅架构部署会使成员资格数据库处于非操作状态,以及为什么不支持部署用户帐户数据。 本主题还提供了有关如何在不同方案中预配、部署和更新成员资格数据库的指南。
深入阅读
有关如何使用 VSDBCMD 的更多指南和示例,请参阅 命令行参考VSDBCMD.EXE (部署和架构导入) 和 如何:从命令提示符导入架构。 有关使用 aspnet_regsql.exe 创建成员身份数据库的详细信息,请参阅 ASP.NET SQL Server 注册工具 (aspnet_regsql.exe) 。 有关部署成员资格数据库的更多常规指南,请参阅 如何:部署 ASP.NET 成员资格数据库而不包括用户帐户。