簡體   English   中英

如何使用托管身份連接到 Azure SQL 數據庫?

[英]How can i connect to Azure SQL Database using Managed Identity?

我在我的應用服務上設置了托管身份並授予了數據庫訪問權限。 我有一個控制台應用程序並使用 Microsoft.Data.SqlClient 3.0.1 作為 nuget package 我測試連接如下:

string ConnectionString1 = @"Server=demo-server.database.windows.net; 
Authentication=Active Directory Managed Identity; Encrypt=True; Database=DEMO";
using (SqlConnection conn = new SqlConnection(ConnectionString1))
{
    conn.Open();
}

但是收到錯誤“密鑰身份驗證的無效值”有人可以幫忙嗎?

更新代碼:

 static void Main()
    {
        string str = @"Server=demo-server.database.windows.net; 
                 Authentication=Active Directory Default; Database=DEMO";
        string qs = "SELECT OrderID, CustomerID FROM dbo.Orders;";
        CreateCommand(qs, str);
    }
    private static void CreateCommand(string queryString,
        string connectionString)
    {
        using (SqlConnection connection = new SqlConnection(
                   connectionString))
        {
            SqlCommand command = new SqlCommand(queryString, connection);
            command.Connection.Open();
            command.ExecuteNonQuery();
        }
    }
}

更新 2:工作代碼

     string ConnectionString =  @"Server=demo-server.database.windows.net,1433;Authentication=Active Directory Default; Encrypt=True;Database=DEMO";
            using (Microsoft.Data.SqlClient.SqlConnection conn = new Microsoft.Data.SqlClient.SqlConnection(ConnectionString))

            //conn.Open();

            using (Microsoft.Data.SqlClient.SqlCommand command = new Microsoft.Data.SqlClient.SqlCommand("SELECT OrderID FROM dbo.Orders;", conn))
            {
                command.Connection.Open();
                using (Microsoft.Data.SqlClient.SqlDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        Console.WriteLine("\t{0}", reader.GetString(0));

                    }
                }
            }

看來我是如何調用 using 子句的

您應該遵循鏈接中的指導: https://learn.microsoft.com/en-us/azure/app-service/tutorial-connect-msi-sql-database?tabs=windowsclient%2Cef%2Cdo.net並采取如果您使用user-assigned managed identity (UAMI),請查看此處https://learn.microsoft.com/en-us/sql/connect/ado.net/sql/azure-active-directory-authentication?view= sql-server-ver16

你沒有state如果你用UAMI或者SAMI,如果你用UAMI,那么:
“對於用戶分配的托管標識,在使用 Microsoft.Data.SqlClient v3.0 或更新版本時必須提供托管標識的客戶端 ID。”

同樣對於 UAMI,您可以嘗試使用“用戶 ID =”Object Principal ID 而不是 ClientID。 User ID=[PrincipalId]

更新

using (SqlConnection connection = new SqlConnection(connectionString))
{
   connection.AccessToken = token.Token;
   SqlCommand command = new SqlCommand(queryString, connection);
   command.Connection.Open();
   command.ExecuteNonQuery();
}

https://github.com/MicrosoftDocs/azure-docs/issues/103115

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM