使用 Microsoft Entra 多重身份验证连接到 Azure SQL 数据库

适用于:Azure SQL 数据库

本文提供了用于连接到 Azure SQL 数据库的 C# 程序。 该程序使用支持 Microsoft Entra ID(旧称 Azure Active Directory多重身份验证的交互模式身份验证。

有关 SQL 工具的多重身份验证支持的详细信息,请参阅使用 Microsoft Entra 多重身份验证

注意

Microsoft Entra ID 以前称为 Azure Active Directory (Azure AD)。

Azure SQL 数据库的多重身份验证

Active Directory Interactive 身份验证支持使用 Microsoft.Data.SqlClient 连接到 Azure SQL 数据源的多重身份验证。 在客户端 C# 程序中,该枚举值指示系统使用支持多重身份验证的 Microsoft Entra 交互模式连接到 Azure SQL 数据库。 然后,运行该程序的用户将看到以下对话框:

  • 一个显示 Microsoft Entra 用户名并要求输入用户密码的对话框。

    如果用户域与 Microsoft Entra ID 联合,则不会显示此对话框,因为不需要密码。

    如果 Microsoft Entra 策略对用户施加多重身份验证,则将显示一个用于登录到帐户的对话框。

  • 当用户首次执行多重身份验证时,系统会显示一个对话框,要求提供要发送短信的电话号码。 每条短信提供了用户必须在下一对话框中输入的验证码。

  • 要求提供系统已发送到手机的多重身份验证验证码的对话框。

有关如何将 Microsoft Entra ID 配置为要求多重身份验证的信息,请参阅云中的 Microsoft Entra 多重身份验证入门

有关这些对话框的屏幕截图,请参阅使用 Microsoft Entra 多重身份验证

提示

可以使用 .NET API 浏览器工具页搜索 .NET Framework API。

也可以使用可选的 ?term=<搜索值> 参数直接进行搜索。

先决条件

在开始之前,逻辑 SQL 服务器须已创建且可用。

为服务器设置 Microsoft Entra 管理员

要运行 C# 示例,逻辑服务器管理员需要从 Microsoft Entra ID 为服务器分配 Microsoft Entra 管理员。

在 Azure 门户的“SQL Server”页面上,从资源菜单中选择“Microsoft Entra ID”,然后选择“设置管理员”。

有关 Azure SQL 数据库的 Microsoft Entra 管理员和用户的详细信息,请参阅使用 SQL 数据库配置和管理 Microsoft Entra 身份验证中的屏幕截图。

Microsoft.Data.SqlClient

C# 示例依赖于 Microsoft.Data.SqlClient 命名空间。 有关详细信息,请参阅结合使用 Microsoft Entra 身份验证与 SqlClient

注意

System.Data.SqlClient 使用弃用的 Azure Active Directory 身份验证库 (ADAL)。 如果使用 System.Data.SqlClient 命名空间进行 Microsoft Entra 身份验证,请将应用程序迁移到 Microsoft.Data.SqlClientMicrosoft 身份验证库 (MSAL)。 有关结合使用 Microsoft Entra 身份验证与 SqlClient 的详细信息,请参阅结合使用 Microsoft Entra 身份验证与 SqlClient

使用 SQL Server Management Studio 进行验证

在运行 C# 示例之前,最好在 SQL Server Management Studio (SSMS) 中检查设置和配置是否正确。 然后,可将任何 C# 程序错误范围缩小到源代码级别。

验证服务器级别防火墙 IP 地址

从同一建筑物中你要运行 C# 示例的同一台计算机运行 SSMS。 可以使用任何身份验证模式来运行此测试。 如果有任何迹象表明服务器不接受 IP 地址,请参阅服务器级和数据库级防火墙规则获得帮助。

验证 Microsoft Entra 多重身份验证

再次运行 SSMS,这一次将“身份验证”设为“具有 MFA 支持的 Azure Active Directory - 通用” 。 此选项需要 SSMS 18.6 或更高版本。

有关详细信息,请参阅使用 Microsoft Entra 多重身份验证

注意

对于 18.x 之前的 SSMS 版本,来宾用户必须为数据库提供 Microsoft Entra 域名或租户 ID:选择“选项”>“AD 域名或租户 ID”。 SSMS 18.x 及更高版本会自动识别租户。

要在 Azure 门户中找到域名,请选择“Microsoft Entra ID”>“自定义域名”。 在 C# 示例程序中,不必要提供域名。

C# 代码示例

注意

如果使用的是 .NET Core,需要使用 Microsoft.Data.SqlClient 命名空间。 有关详细信息,请参阅以下博客文章

这是 C# 源代码的示例。


using System;
using Microsoft.Data.SqlClient;

public class Program
{
    public static void Main(string[] args)
    {
        // Use your own server, database, and user ID.
        // Connetion string - user ID is not provided and is asked interactively.
        string ConnectionString = @"Server=<your server>.database.chinacloudapi.cn; Authentication=Active Directory Interactive; Database=<your database>";


        using (SqlConnection conn = new SqlConnection(ConnectionString))

        {
            conn.Open();
            Console.WriteLine("ConnectionString2 succeeded.");
            using (var cmd = new SqlCommand("SELECT @@Version", conn))
            {
                Console.WriteLine("select @@version");
                var result = cmd.ExecuteScalar();
                Console.WriteLine(result.ToString());
            }

        }
        Console.ReadKey();

    }
}

 

这是 C# 测试输出的示例。

ConnectionString2 succeeded.
select @@version
Microsoft SQL Azure (RTM) - 12.0.2000.8
   ...

后续步骤