你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

用于从 SQL Server 在线迁移到 Azure SQL 托管实例的自定义角色

Azure 数据库迁移服务使用应用 ID 来与 Azure 服务交互。 应用 ID 需要订阅级别的“参与者”角色(许多企业安全部门不允许这种角色),或创建自定义角色用于授予 Azure 数据库迁移服务所需的特定权限。 由于 Microsoft Entra ID 中存在 2,000 个自定义角色的限制,因此你可能希望将应用 ID 所需的所有权限合并为一个或两个自定义角色,然后将应用 ID 授予特定对象或资源组上的自定义角色(与订阅级别)。 如果自定义角色数目没有限制,则可按资源类型拆分自定义角色,以根据下面所述总共创建三个自定义角色。

使用角色定义 JSON 字符串的 AssignableScopes 节,可以控制权限在门户上“添加角色分配”UI 中的显示位置。 你可能想要在资源组甚至资源级别定义角色,以免额外的角色使 UI 变得杂乱无章。 请注意,这并不会执行实际的角色分配。

最小角色数

目前,我们建议至少为应用 ID 创建两个自定义角色,一个在资源级别创建,另一个在订阅级别创建。

注意

最后一项自定义角色要求最终可能会取消,因为新的 SQL 托管实例代码将部署到 Azure 中。

应用 ID 的自定义角色。 在托管Azure 数据库迁移服务的资源或资源组级别Azure 数据库迁移服务迁移需要此角色(有关应用 ID 的详细信息,请参阅使用门户创建可访问资源的 Microsoft Entra 应用程序和服务主体)一文

{
  "Name": "DMS Role - App ID",
  "IsCustom": true,
  "Description": "DMS App ID access to complete MI migrations",
  "Actions": [
        "Microsoft.Storage/storageAccounts/read",
        "Microsoft.Storage/storageAccounts/listKeys/action",
        "Microsoft.Storage/storageaccounts/blobservices/read",
        "Microsoft.Storage/storageaccounts/blobservices/write",
        "Microsoft.Sql/managedInstances/read",
        "Microsoft.Sql/managedInstances/write",
        "Microsoft.Sql/managedInstances/databases/read",
        "Microsoft.Sql/managedInstances/databases/write",
        "Microsoft.Sql/managedInstances/databases/delete",
        "Microsoft.Sql/managedInstances/metrics/read",
        "Microsoft.DataMigration/locations/*",
        "Microsoft.DataMigration/services/*"
  ],
  "NotActions": [
  ],
  "AssignableScopes": [
    "/subscriptions/<subscription_id>/ResourceGroups/<StorageAccount_rg_name>",
    "/subscriptions/<subscription_id>/ResourceGroups/<ManagedInstance_rg_name>",
    "/subscriptions/<subscription_id>/ResourceGroups/<DMS_rg_name>",
  ]
}

应用 ID 的自定义角色 - 订阅。 在托管 SQL 托管实例的订阅级别进行 Azure 数据库迁移服务迁移时需要此角色。

{
  "Name": "DMS Role - App ID - Sub",
  "IsCustom": true,
  "Description": "DMS App ID access at subscription level to complete MI migrations",
  "Actions": [
        "Microsoft.Sql/locations/managedDatabaseRestoreAzureAsyncOperation/*"
  ],
  "NotActions": [
  ],
  "AssignableScopes": [
    "/subscriptions/<subscription_id>"
  ]
}

以上 JSON 必须存储在两个文本文件中,可以在 AzureRM、AZ PowerShell cmdlet 或 Azure CLI 中使用 New-AzureRmRoleDefinition (AzureRM)New-AzRoleDefinition (AZ) 创建角色。

有关详细信息,请参阅 Azure 自定义角色一文。

创建这些自定义角色后,必须将角色分配添加到相应资源或资源组中的用户和应用 ID:

  • 必须将“DMS 角色 - 应用 ID”角色授予将用于迁移的应用 ID,以及存储帐户、Azure 数据库迁移服务实例和SQL 托管实例资源级别。 在托管 Azure 数据库迁移服务的资源或资源组级别授予该角色。
  • 必须在托管 SQL 托管实例的订阅级别为应用 ID 授予“DMS 角色 - 应用 ID - 订阅”角色(无法在资源或资源组级别授予)。 此项要求是暂时性的,部署代码更新后将会取消。

扩展的角色数

如果 Microsoft Entra ID 中的自定义角色数量不相关,建议创建总共三个角色。 仍需要“DMS 角色 - 应用 ID - 订阅”角色,但上述“DMS 角色 - 应用 ID”角色将按资源类型拆分成两个不同的角色。

SQL 托管实例的应用 ID 的自定义角色

{
  "Name": "DMS Role - App ID - SQL MI",
  "IsCustom": true,
  "Description": "DMS App ID access to complete MI migrations",
  "Actions": [
        "Microsoft.Sql/managedInstances/read",
        "Microsoft.Sql/managedInstances/write",
        "Microsoft.Sql/managedInstances/databases/read",
        "Microsoft.Sql/managedInstances/databases/write",
        "Microsoft.Sql/managedInstances/databases/delete",
        "Microsoft.Sql/managedInstances/metrics/read"
  ],
  "NotActions": [
  ],
  "AssignableScopes": [
    "/subscriptions/<subscription_id>/resourceGroups/<ManagedInstance_rg_name>"
  ]
}

存储的应用 ID 的自定义角色

{
  "Name": "DMS Role - App ID - Storage",
  "IsCustom": true,
  "Description": "DMS App ID storage access to complete MI migrations",
  "Actions": [
"Microsoft.Storage/storageAccounts/read",
        "Microsoft.Storage/storageAccounts/listKeys/action",
        "Microsoft.Storage/storageaccounts/blobservices/read",
        "Microsoft.Storage/storageaccounts/blobservices/write"
  ],
  "NotActions": [
  ],
  "AssignableScopes": [
    "/subscriptions/<subscription_id>/resourceGroups/<StorageAccount_rg_name>"
  ]
}

角色分配

若要将角色分配给用户/应用 ID,请打开 Azure 门户并执行以下步骤:

  1. 导航到相应的资源组或资源(需要在订阅级别授予的角色除外),转到“访问控制”,然后滚动页面找到刚刚创建的自定义角色。

  2. 选择相应的角色,选择应用 ID,然后保存更改。

该应用 ID 随即会显示在“角色分配”选项卡上。

后续步骤