0

由于安全原因,禁用了 SQL 身份验证,只能通过 Azure SPN 登录。从下面的链接,在 C# 中,我们可以连接:

https://techcommunity.microsoft.com/t5/azure-sql-database/azure-ad-service-principal-authentication-to-sql-db-code-sample/ba-p/481467

如何在下面的 DbUp 中通过上述成功的访问令牌认证连接program.cs

var upgrader = DeployChanges.To.AzureSqlDataWarehouse(connectionString)
                            .WithScriptsEmbeddedInAssembly(Assembly.GetExecutingAssembly())
                            .LogToConsole()
                            .LogScriptOutput().WithExecutionTimeout(TimeSpan.FromSeconds(60))
                            .Build();
var result = upgrader.PerformUpgrade();
4

2 回答 2

0

DbUp 应在 DeployChanges.To.AzureSqlDataWarehouse 调用中公开一个布尔值,以在内部使用令牌身份验证。不幸的是,你不能传递你已经拥有的令牌。

DeployChanges.To.AzureSqlDataWarehouse(connectionString,true)
于 2022-01-11T14:26:03.627 回答
0

不确定您是否已解决此问题但想提供合适的答案,因为它可能会帮助其他人寻找相同或类似的解决方案。首先,在查看DbUp时,我没有看到对 Azure AD 身份验证的任何本机支持,但我认为您正在寻找以下内容。

使用 Azure AD auth 对 Azure SQL DB 的基于令牌的身份验证支持

链接的技术社区博客讨论了可用于对 Azure SQL 进行身份验证的所有 Azure AD 方法。它包含一个示例应用程序 ( TokenReadme.Zip ) 演示基于令牌的身份验证,其中TokenReadme.docxprogram.cs中包含的示例如下:

using System;
using System.Data;
using System.Data.SqlClient;

namespace ClinicService
  {
class Program
{
    static void Main()
    {
        SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
        builder["Data Source"] = "aad-managed-demo.database.windows.net"; // replace with your server name
        builder["Initial Catalog"] = "demo"; // replace with your database name
        builder["Connect Timeout"] = 30;

        string accessToken = TokenFactory.GetAccessToken();
        if (accessToken == null)
        {
            Console.WriteLine("Fail to acuire the token to the database.");
        }
        using (SqlConnection connection = new SqlConnection(builder.ConnectionString))
        {
            try
            {
                connection.AccessToken = accessToken;
                connection.Open();
                Console.WriteLine("Connected to the database");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        Console.WriteLine("Please press any key to stop");
        Console.ReadKey();
    }
  }
}

您应该能够利用 TokenReadme 示例来修改您的 DbUp .NET 库解决方案以利用基于令牌的身份验证。问候,迈克

于 2020-07-28T04:20:40.460 回答