使用 Azure AD 多重要素驗證,連線至 Azure SQL Database

適用于:Azure SQL資料庫

此發行項提供 C# 程式,可以連線至 Azure SQL Database。 程式會使用互動模式驗證,其支援 Azure AD 多重要素驗證

如需 SQL 工具的多重要素驗證支援詳細資訊,請參閱使用多重要素 Azure Active Directory 驗證

Azure SQL Database 的多重要素驗證

Active Directory Interactive驗證支援使用 Microsoft.Data.SqlClient 連線到 Azure SQL 資料來源的多重要素驗證。 在用戶端 C# 程式中,列舉值會指示系統使用 Azure Active Directory (Azure AD) 互動模式,支援多重要素驗證連線至 Azure SQL Database。 執行程式的使用者會看到下列對話方塊:

  • 對話方塊會顯示 Azure AD 使用者名稱,並要求使用者密碼。

    若使用者的網域與 Azure AD 同盟,則對話方塊不會顯示,因為無需密碼。

    如果 Azure AD 原則對使用者強制執行多重要素驗證,則會顯示登入帳戶的對話方塊。

  • 使用者首次進行多重要素驗證時,系統會顯示對話方塊,要求提供行動電話號碼以傳送簡訊。 每個訊息會提供驗證碼,使用者必須在下一個對話方塊中輸入該驗證碼。

  • 此對話方塊會要求由系統傳送到行動電話的多重要素驗證碼。

如需如何設定 Azure AD 以要求多重要素驗證的資訊,請參閱開始在雲端中使用 Azure AD 多重要素驗證

如需這些對話方塊的螢幕擷取畫面,請參閱設定 SQL Server Management Studio 和 Azure AD 的多重要素驗證

提示

您可以使用 .NET API 瀏覽器工具頁面,搜尋 .NET Framework API。

您也可以透過選擇性的 ?term=<搜尋值> 參數來直接搜尋。

必要條件

開始之前,您應該已建立並可使用邏輯 SQL Server

為您的伺服器設定 Azure AD 管理員

為了讓 C# 範例能夠執行,邏輯 SQL Server 管理員需要為您的伺服器指派 Azure AD 管理員。

在 [SQL Server] 頁面上,選取 [Active Directory 管理員]>[設定管理員]。

如需 Azure SQL Database 的 Azure AD 管理員和使用者詳細資訊,請參閱使用 SQL Database 設定和管理 Azure Active Directory 驗證中的螢幕擷取畫面。

Microsoft.Data.SqlClient

C# 範例會仰賴 Microsoft.Data.SqlClient 命名空間。 如需詳細資訊,請參閱使用 Azure Active Directory 驗證搭配 SqlClient

注意

System.Data.SqlClient 是使用 Azure Active Directory 驗證程式庫 (ADAL),其即將淘汰。 如果您使用 System.Data.SqlClient 命名空間進行 Azure Active Directory 驗證,請將應用程式遷移至 Microsoft.Data.SqlClientMicrosoft Authentication Library (MSAL)。 如需搭配 SqlClient 使用 Azure AD 驗證的詳細資訊,請參閱搭配 SqlClient 使用 Azure Active Directory 驗證

使用 SQL Server Management Studio 進行驗證

在執行 C# 範例之前,建議您先檢查 SQL Server Management Studio (SSMS) 中的設定和組態皆正確無誤。 如此一來,任何 C# 程式失敗就會是原始程式碼的問題。

確認伺服器層級的防火牆 IP 位址

在您計畫執行 C# 範例的相同組建中,從相同的電腦執行 SSMS。 針對此測試,任何驗證模式皆可使用。 如果出現伺服器不接受 IP 位址的指示,請參閱伺服器層級和資料庫層級的防火牆規則以取得說明。

驗證 Azure Active Directory 多重要素驗證

再次執行 SSMS,但這次請將 [驗證] 設定為 [Active Directory - 通用 (使用 MFA)]。 此選項需要 SSMS 17.5 或更新版本。

如需詳細資訊,請參閱設定 SSMS 和 Azure AD 的多重要素驗證

注意

如果您在資料庫中是來賓使用者,您也必須為資料庫提供 Azure AD 網域名稱:選取 [選項]>[AD 網域名稱或租用戶識別碼]。 如果您執行的是 SSMS 18.x 或更新版本,則來賓使用者已不再需要 AD 網域名稱或租用戶識別碼,因為 18.x 或更新版本會自動辨識。

若要在 Azure 入口網站中尋找網域名稱,請選取 [Azure Active Directory]>[自訂網域名稱]。 在 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.windows.net; 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
   ...

後續步驟