[英]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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.