【问题标题】:How to connect an already existing .Net Core application to Azure SQL Database with managed identity如何使用托管标识将现有的 .Net Core 应用程序连接到 Azure SQL 数据库
【发布时间】:2020-06-16 15:32:52
【问题描述】:

设置连接字符串并添加应用身份验证 NuGet 包后,将应用程序成功连接到 Azure SQL 数据库的步骤是什么。

【问题讨论】:

  • 你试过什么?你面临什么实际问题?你的代码在哪里?附:我假设您已经进行了一些基础研究并找到了类似这样的教程:docs.microsoft.com/en-us/azure/azure-sql/database/… 或类似的东西?如果没有,为什么不呢?
  • 我确实找到了docs.microsoft.com/en-us/azure/app-service/…,但我正在寻找没有实体框架的 .Netcore 中的东西。
  • 我卡住了,在SqlConnection下找不到AccessToken方法。如何打开与 Azure SQL 数据库的连接?
  • 按照我链接到的教程进行操作。它使用 .NET Core 和 ADO.NET
  • 谢谢,但有没有办法使用托管身份(使用访问令牌)?

标签: c# asp.net-core-mvc azure-sql-database azure-managed-identity


【解决方案1】:

如果您想在.Net Core MVC 项目中使用Azure Managed Identity 连接Azure SQL 数据库,我们可以使用带有SqlConnection.AccessToken 的包Microsoft.Data.SqlClient

详细步骤如下。

  1. 创建 MSI

  2. 配置 SQL 数据库

    一个。 Use your Azure Sql AD admin to connect Azure SQL vai SSMS

    b.将 MSI 添加到您需要使用的数据库中

    USE [<db name>]
    GO
    create user [<your msi name>] from external provider
    ALTER ROLE db_owner ADD MEMBER [<function app name>]
    
  3. 代码

 /*
             Install SDK Microsoft.Azure.Services.AppAuthentication and Microsoft.Data.SqlClient

*/

 public async Task<IActionResult> Index()
        {
            List<StarWar> starWars = new List<StarWar>();
            var connectionString = "Server=tcp:<server-name>.database.windows.net,1433;Database=<database-name>;";
            using (var conn = new SqlConnection(connectionString))
            {
                conn.AccessToken = await (new Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProvider()).GetAccessTokenAsync("https://database.windows.net/");
                await conn.OpenAsync();
                var sql = "SELECT  * FROM [dbo].[StarWars]";
                using (SqlCommand command = new SqlCommand(sql, conn))
                {
                    using (SqlDataReader reader = await command.ExecuteReaderAsync())
                    {
                        while (await reader.ReadAsync())
                        {
                            StarWar starWar = new StarWar();
                            starWar.episode = Convert.ToInt32(reader["episode"]);
                            starWar.score = Convert.ToInt32(reader["score"]);
                            starWar.name = Convert.ToString(reader["name"]);
                            starWars.Add(starWar);
                        }
                    }

                }
            }


                return View(starWars);
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    • 2020-08-26
    • 2021-08-15
    • 2020-04-06
    • 2020-03-05
    • 2017-04-19
    • 1970-01-01
    相关资源
    最近更新 更多