迁移 .NET 应用程序以使用无密码连接至 Azure SQL 数据库

适用于:Azure SQL Database

必须对Azure SQL Database的应用程序请求进行身份验证。 尽管有多个选项可用于对Azure SQL Database进行身份验证,但应尽可能确定应用程序中的无密码连接优先级。 使用密码或密钥的传统身份验证方法会产生安全风险和复杂性。 访问 Azure 服务的 无密码连接中心,详细了解迁移到无密码连接的优势。 以下教程介绍如何迁移现有应用程序以连接到Azure SQL Database以使用无密码连接,而不是用户名和密码解决方案。

配置Azure SQL Database

无密码连接使用Microsoft Entra身份验证连接到Azure服务,包括Azure SQL Database。 Microsoft Entra身份验证,可以在中心位置管理标识以简化权限管理。 详细了解如何为Azure SQL Database配置Microsoft Entra身份验证:

在此迁移指南中,请确保已在 Azure SQL 数据库中分配了一名 Microsoft Entra 管理员。

  1. 请导航到您的逻辑服务器上的Microsoft Entra页面。

  2. 选择 Set admin 打开 Microsoft Entra ID 浮出控件菜单。

  3. Microsoft Entra ID 浮出控件菜单中,搜索要分配为管理员的用户。

  4. 选择该用户,然后选择“选择”。

    一个显示如何启用 Microsoft Entra 管理员的屏幕截图。

配置本地开发环境

可以将无密码连接配置为同时适用于本地和Azure托管环境。 在本部分中,你将应用配置,以允许单个用户向Azure SQL Database进行身份验证,以便进行本地开发。

登录到Azure

对于本地开发,请确保使用要用于访问Azure SQL Database的同一Microsoft Entra帐户登录。 可以通过常用的开发工具(如Azure CLI或Azure PowerShell)进行身份验证。 可用于进行身份验证的开发工具因语言而异。

使用以下命令通过Azure CLI登录Azure。 这适用于 Windows、macOS 和 Linux。

az login

创建数据库用户并分配角色

在Azure SQL Database中创建用户。 用户应与用于通过Visual Studio或 IntelliJ 等开发工具本地登录的Azure帐户相对应。

  1. Azure 门户中,浏览到 SQL 数据库并选择 Query 编辑器(预览版)

  2. 选择屏幕右侧的“以 <your-username> 身份继续”,使用你的帐户登录到数据库。

  3. 在查询编辑器视图中,运行以下 T-SQL 命令:

    CREATE USER [user@domain] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [user@domain];
    ALTER ROLE db_datawriter ADD MEMBER [user@domain];
    ALTER ROLE db_ddladmin ADD MEMBER [user@domain];
    GO
    

    A 屏幕截图显示如何使用 Azure 查询编辑器.

    运行这些命令会将 SQL DB 参与者角色分配给指定的帐户。 此角色允许标识读取、写入和修改数据库的数据和架构。 有关分配的角色的详细信息,请参阅固定数据库角色

更新本地连接配置

使用 Microsoft.Data.SqlClient 库或Entity Framework Core连接到Azure SQL Database的现有应用程序代码将继续使用无密码连接。 您必须更新数据库的连接字符串以使用无密码格式。 例如,以下代码使用 SQL 身份验证和无密码连接:

string connectionString = app.Configuration.GetConnectionString("AZURE_SQL_CONNECTIONSTRING")!;

using var conn = new SqlConnection(connectionString);
conn.Open();

var command = new SqlCommand("SELECT * FROM Persons", conn);
using SqlDataReader reader = command.ExecuteReader();

为了更新引用的连接字符串(AZURE_SQL_CONNECTIONSTRING),请使用无密码连接字符串格式:

  1. 找到连接字符串。 对于使用 .NET 应用程序的本地开发,这通常存储在以下位置之一:

    • 项目的 appsettings.json 配置文件。
    • Visual Studio项目的 launchsettings.json 配置文件。
    • 本地系统或容器环境变量。
  2. 将connection string值替换为以下无密码格式。 用你自己的值更新 <database-server-name><database-name> 占位符:

    Server=tcp:<database-server-name>.database.chinacloudapi.cn,1433;Initial Catalog=<database-name>;
    Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;Authentication="Active Directory Default";
    

测试应用程序

在本地运行应用,并验证与Azure SQL Database的连接是否按预期工作。 请记住,更改Azure用户和角色可能需要几分钟才能通过Azure环境传播。 你的应用程序现已配置为在本地运行,开发人员无需管理该应用程序本身的机密。

配置Azure托管环境

将应用配置为在本地使用无密码连接后,相同的代码可以在部署到Azure后对Azure SQL Database进行身份验证。 以下各节介绍如何将已部署的应用程序配置为使用 托管标识连接到 Azure SQL Database。 托管标识在 Microsoft Entra ID(以前称为 Azure Active Directory)中提供自动托管身份,以便应用程序在连接到支持 Microsoft Entra 身份验证的资源时使用。 了解有关托管标识的更多信息:

创建托管标识

使用Azure门户或Azure CLI创建用户分配的托管标识。 应用程序将使用该标识向其他服务进行身份验证。

  1. 在 Azure 门户顶部,搜索 托管标识。 选择“托管标识”结果
  2. 选择“托管标识”概述页顶部的“+ 创建”。
  3. 在“基本信息”选项卡中,输入以下值:
    • “订阅”:选择所需的订阅。
    • “资源组”:选择所需的资源组。
    • 区域:选择你所在位置附近的区域。
    • 名称:输入标识的可识别名称,例如 MigrationIdentity。
  4. 在页面底部选择查看 + 创建
  5. 验证检查完成后,选择“创建”。 Azure创建新的用户分配标识。

创建资源后,选择“转到资源”以查看托管标识的详细信息。

一张屏幕截图显示如何使用 Azure 门户创建托管标识。

将托管标识与 Web 应用相关联

配置 Web 应用以使用你创建的用户分配的托管标识。

在 Azure 门户中完成以下步骤,将用户分配的托管标识与应用相关联。 这些步骤适用于以下Azure服务:

  • Azure Spring Apps
  • Azure Container Apps
  • Azure虚拟机
  • Azure Kubernetes Service
  • 导航到 Web 应用的概述页面。
  1. 从左侧导航中选择“标识”。

  2. 在“标识”页上,切换到“用户分配”选项卡。

  3. 选择“+ 添加”,打开“添加用户分配的托管标识”浮出控件。

  4. 选择之前用于创建标识的订阅。

  5. 按名称搜索 MigrationIdentity,并从搜索结果中将其选中。

  6. 选择“添加”,以将该标识与应用相关联。

    显示如何分配托管标识的屏幕截图。

为身份创建数据库用户并分配角色

创建一个映射回用户分配的托管标识的 SQL 数据库用户。 向用户分配所需的 SQL 角色,以允许应用读取、写入和修改数据库的数据和架构。

  1. 在 Azure 门户中,浏览到 SQL 数据库并选择 Query 编辑器(预览版)

  2. 选择屏幕右侧的“以 <username> 身份继续”,使用你的帐户登录到数据库。

  3. 在查询编辑器视图中,运行以下 T-SQL 命令:

    CREATE USER [user-assigned-identity-name] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [user-assigned-identity-name];
    ALTER ROLE db_datawriter ADD MEMBER [user-assigned-identity-name];
    ALTER ROLE db_ddladmin ADD MEMBER [user-assigned-identity-name];
    GO
    

    一个屏幕截图展示了如何使用 Azure 查询编辑器为托管身份创建 SQL 用户。

    运行这些命令会将 SQL DB 参与者角色分配给用户分配的托管标识。 此角色允许标识读取、写入和修改数据库的数据和架构。

重要

在企业生产环境中分配数据库用户角色时请谨慎。 在这些情况下,应用程序不应使用单个提升的权限执行所有操作。 通过为特定任务配置具有特定权限的多个标识,尝试实现最低特权原则。

若要详细了解如何配置数据库角色和安全性,可以阅读以下资源:

更新连接字符串

更新Azure应用配置以使用无密码连接字符串格式。 连接字符串通常作为环境变量存储在应用托管环境中。 以下说明侧重于应用服务,但其他Azure托管服务提供类似的配置。

  1. 导航到应用服务实例的配置页,找到Azure SQL Database connection string。

  2. 选择编辑图标并更新连接字符串值以符合以下格式。 将 <database-server-name><database-name> 占位符替换为您服务的相应值。

    "Server=tcp:<database-server-name>.database.chinacloudapi.cn,1433;Initial Catalog=<database-name>;
    Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;Authentication="Active Directory Default";
    
  3. 保存更改并重启应用程序(如果它未自动重启)。

测试应用程序

测试应用,确保一切仍然正常。 通过Azure环境传播所有更改可能需要几分钟时间。