无法将数据库从具有 EF 核心和 AAD 授权的代码迁移到 SQL 服务器

问题描述

背景

我正在尝试在我的 sql 服务器中授权我的 WebApp。 WebApp 和 sql 服务器都托管在 Azure 上。 我使用 Net core 3.1 和 EF core 3.1。我的网络应用程序托管在 linux 机器上。我还必须实现能够从 API 端点迁移数据库功能

复制 tutorial I used

  1. 在我的 Web 应用程序中,我有 API 端点:POST api/migrate,它负责迁移我的数据库
    _dbContext.Database.Migrate();
  1. 在我的网络应用中,我启用了托管服务标识。可以从 Azure 门户完成,但我已经在我网站的 ARM 模板中完成了:
    "identity": {
      "type": "SystemAssigned"
    },
  1. 在我的 AAD 中,我创建了名为 MSI-sqlSERVER-ACCESSGROUP 的组(类型为 Security)。我将我的 Web 应用程序作为服务主体添加到该组。我可以这样做,因为我之前启用了 MSI。

  2. 在我的业务数据库中,我添加了名为 MSI-sqlSERVER-ACCESSGROUP 的 Contained 用户

    CREATE USER MSI-sqlSERVER-ACCESSGROUP FROM EXTERNAL PROVIDER
    ALTER ROLE db_datareader ADD MEMBER MSI-sqlSERVER-ACCESSGROUP
    ALTER ROLE db_datawriter ADD MEMBER MSI-sqlSERVER-ACCESSGROUP
    ALTER ROLE db_ddladmin ADD MEMBER MSI-sqlSERVER-ACCESSGROUP
  1. 我在 dbContext 构造函数中将 Accesstoken 添加数据库连接:
    var conn = (sqlConnection)_dbContext.Database.GetDbConnection();
    conn.Accesstoken = (new AzureServicetokenProvider()).GetAccesstokenAsync("https://database.windows.net/").Result;

问题

我可以通过 dbContext 访问数据库数据。不幸的是,我无法迁移我的数据库。我的端点返回 HTTP 500。日志说:

指定的架构名称“{appId}@{AAD 租户 ID}”不存在或您无权使用它。

尝试过

我已将 db_securityadmindb_accessadmindb_owner 提供给我的用户,但没有帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...