数据库密码存储在 Web Deploy pubxml 文件中

Database passwords being stored in Web Deploy pubxml file

我有一个 asp.net MVC 应用程序,它使用 EF 代码优先迁移。

我使用 Web 部署将此项目发布到 Azure。

这一切都很好,但我不喜欢的一件事是 Web 部署创建的 pubxml 文件存储了它从 Azure Web 应用程序配置下载的连接字符串。

这些连接字符串包含 sql azure 密码,因为我在源代码管理中有 pubxml 文件,所以这种情况并不理想:

<ObjectGroup Name="DefaultConnection" Order="3" Enabled="True">
  <Destination Path="Data Source=tcp:###.database.windows.net,1433;Initial Catalog=###_db;User ID=###;Password=###" Name="Data Source=tcp:###.database.windows.net,1433;Initial Catalog=###_db;User Id=###;Password=###" />
  <Object Type="DbCodeFirst">
    <Source Path="DBMigration" DbContext="###.Server.Models.DAL.ApplicationDbContext, ###.Server.Models" MigrationConfiguration="###.Server.Migrations.Configuration, ###.Server" Origin="Configuration" />
  </Object>
</ObjectGroup>

有没有办法将其配置为不存储密码,或者有更好的部署方式同时保证密码安全?

同意;最好不要将您的凭据或 pubxml 文件存储在源代码管理中!

您正试图保护凭据不被他人获取,因此您是否考虑过持续集成 (CI) 流程?在这种情况下,您只需保护对 CI 服务器的访问。 在 CI 服务器上,您可以定义构建步骤以使用 PowerShell 从外部服务器、Azure blob 存储下载 pubxml,或将文件存储在 CI 服务器上,将其复制到位。

我就是这样做的,而且效果非常好。我怎么推荐都不为过。我的构建过程包括 TeamCity Build -> Octopus Deploy -> Azure.

如果您直接在 Visual Studio 中创建构建步骤,构建步骤将存储在 csproj 文件中,并且 pubxml 将被复制到执行构建的计算机;您的凭据立即遭到泄露。