在 Azure SQL 中创建启用了“仅限 Microsoft Entra 身份验证”的服务器

适用于:Azure SQL 数据库Azure SQL 托管实例

本操作指南概述了在预配期间创建启用了仅限 Microsoft Entra 身份验证的 Azure SQL 数据库的逻辑服务器Azure SQL 托管实例的步骤。 “仅限 Microsoft Entra 身份验证”功能可阻止用户使用 SQL 身份验证连接到服务器或托管实例,仅允许使用 Microsoft Entra ID(旧称 Azure Active Directory)身份验证进行连接。

备注

Microsoft Entra ID 以前称为 Azure Active Directory (Azure AD)。

先决条件

  • 使用 Azure CLI 时,需要 2.26.1 或更高版本。 若要详细了解安装和最新版本,请参阅安装 Azure CLI
  • 使用 PowerShell 时需要 Az 6.1.0 模块或更高版本。
  • 如果要使用 Azure CLI、PowerShell 或 REST API 预配托管实例,需要在开始之前创建虚拟网络和子网。 有关详细信息,请参阅为 Azure SQL 托管实例创建虚拟网络

权限

若要预配逻辑服务器或托管实例,需要具有相应权限才能创建这些资源。 具有更高权限的 Azure 用户,例如订阅所有者参与者服务管理员共同管理员,拥有创建 SQL Server 或托管实例的特权。 若要使用特权最低的 Azure RBAC 角色创建这些资源,请对 SQL 数据库使用 SQL Server 参与者角色,对 SQL 托管实例使用 SQL 托管实例参与者角色。

SQL 安全管理器 Azure RBAC 角色没有足够的权限来创建启用了“仅限 Microsoft Entra 身份验证”的服务器或实例。 创建服务器或实例后,将需要 SQL 安全管理器角色来管理“仅限 Microsoft Entra 身份验证”功能。

在已启用“仅限 Microsoft Entra 的身份验证”的情况下进行预配

以下部分提供了一些示例和脚本,介绍如何创建逻辑服务器或托管实例,为服务器或实例设置 Microsoft Entra 管理员,以及如何在服务器创建期间启用“仅限 Microsoft Entra 身份验证”。 有关该功能的详细信息,请参阅使用 Azure SQL 进行仅限 Microsoft Entra 身份验证

在我们的示例中,我们将使用系统分配的服务器管理员和密码,在服务器或托管实例创建期间启用“仅限 Microsoft Entra 的身份验证”。 启用“仅限 Microsoft Entra 身份验证”后,该功能将阻止服务器管理员访问,仅允许 Microsoft Entra 管理员访问该资源。 可以选择向 API 添加参数,以在服务器创建过程中包含自己的服务器管理员和密码。 但是,在禁用“仅限 Microsoft Entra 身份验证”之前,无法重置密码。 此页的 PowerShell 标签页中提供了如何使用这些可选参数来指定服务器管理员登录名的示例。

备注

若要在创建服务器或托管实例后更改 Microsoft仅限 Entra 的身份验证 属性,应使用其他现有 API。 有关详细信息,请参阅 通过 API 管理 Microsoft Entra 仅身份验证

如果“仅限 Microsoft Entra 身份验证”设置为 false(默认情况下为 false),则需要在服务器或托管实例创建过程中将服务器管理员和密码包含在所有 API 中。

Azure SQL 数据库

PowerShell 命令 New-AzSqlServer 用于预配新的逻辑服务器。 以下命令将预配启用了“仅限 Microsoft Entra 身份验证”的新服务器。

将自动创建服务器 SQL 管理员,并将密码设置为随机密码。 由于在服务器创建过程中禁用了 SQL 身份验证连接,因此不会使用 SQL 管理员登录名。

服务器 Microsoft Entra 管理员将是你为 <MSEntraAccount> 设置的帐户,可用于管理服务器。

替换示例中的以下值:

  • <ResourceGroupName>:逻辑服务器的资源组名称
  • <Location>:服务器的位置,例如 China East 2China North 2
  • <ServerName>:使用唯一的逻辑服务器名称
  • <MSEntraAccount>:可以是 Microsoft Entra 用户或组。 例如: DummyLogin
$server = @{
    ResourceGroupName = "<ResourceGroupName>"
    Location = "<Location>"
    ServerName = "<ServerName>"
    ServerVersion = "12.0"
    ExternalAdminName = "<MSEntraAccount>"
    EnableActiveDirectoryOnlyAuthentication = $true
}

New-AzSqlServer @server

以下示例展示了在创建逻辑服务器时指定服务器管理员名称,而不是让其自动生成。 如前所述,如果启用了“仅限 Microsoft Entra 身份验证”,则此登录名将不可使用。

$cred = Get-Credential
New-AzSqlServer -ResourceGroupName "<ResourceGroupName>" -Location "<Location>" -ServerName "<ServerName>" -ServerVersion "12.0" -ExternalAdminName "<MSEntraAccount>" -EnableActiveDirectoryOnlyAuthentication -SqlAdministratorCredentials $cred

有关详细信息,请参阅 New-AzSqlServer

Azure SQL 托管实例

PowerShell 命令 New-AzSqlInstance 用于预配新的 Azure SQL 托管实例。 以下命令将预配启用了“仅限 Microsoft Entra 身份验证”的新托管实例。

备注

作为先决条件,该脚本要求创建虚拟网络和子网。

将自动创建托管实例 SQL 管理员,并将密码设置为随机密码。 由于在预配过程中禁用了 SQL 身份验证连接,因此不会使用 SQL 管理员登录名。

Microsoft Entra 管理员是为 <MSEntraAccount> 设置的帐户,可用于在预配完成时管理实例。

替换示例中的以下值:

  • <managedinstancename>:命名要创建的托管实例
  • <ResourceGroupName>:托管实例的资源组的名称。 资源组还应包括创建的虚拟网络和子网
  • <MSEntraAccount>:可以是 Microsoft Entra 用户或组。 例如: DummyLogin
  • <Location>:服务器的位置,例如 chinaeast2chinanorth2
  • 需要用 SubnetId<Subscription ID><ResourceGroupName><VNetName> 来更新 <SubnetName> 参数。 可以在 Azure 门户中找到订阅 ID
$instanceName = @{
    Name = "<managedinstancename>"
    ResourceGroupName = "<ResourceGroupName>"
    ExternalAdminName = "<MSEntraAccount>"
    EnableActiveDirectoryOnlyAuthentication = $true
    Location = "<Location>"
    SubnetId = "/subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroupName>/providers/Microsoft.Network/virtualNetworks/<VNetName>/subnets/<SubnetName>"
    LicenseType = "LicenseIncluded"
    StorageSizeInGB = 128
    VCore = 4
    Edition = "GeneralPurpose"
    ComputeGeneration = "Gen5"
}

New-AzSqlInstance $instanceName

有关详细信息,请参阅 New-AzSqlInstance

授予目录读取者权限

完成托管实例的部署后,你可能会注意到 SQL 托管实例需要读取权限才能访问 Microsoft Entra ID。 具有足够特权的人员选择 Azure 门户中显示的消息即可授予读取权限。 有关详细信息,请参阅 Azure SQL 的 Microsoft Entra ID 中的目录读取者角色

Azure 门户中 Microsoft Entra 管理员菜单的屏幕截图,其中显示需要读取权限。

限制

  • 若要重置服务器管理员密码,必须禁用“仅限 Microsoft Entra 身份验证”。
  • 如果禁用 Microsoft Entra 仅身份验证,在使用所有 API 时,必须创建一个带有服务器管理员和密码的服务器。