与 Microsoft Entra ID 集成

Cloud SQL for SQL Server 与 Microsoft Entra ID 集成后,您可以使用现有的 Microsoft Entra ID 租户为数据库提供集中式身份和访问管理 (IAM)。

这种集成具有以下优势:

  • 集中式身份验证。让用户和应用能够使用现有的 Microsoft Entra ID 身份信息登录其 Cloud SQL for SQL Server 实例,而无需重新输入密码。此功能无需管理单独的 SQL Server 专用登录名和密码。

  • 增强安全性。有助于您在数据库级别强制执行组织现有的安全政策,例如多重身份验证 (MFA) 和条件访问 (CA) 规则。

  • 简化用户管理。当用户的 Microsoft Entra ID 账号被停用或移除时,用户的数据库访问权限会自动被撤消。此功能有助于简化员工离职流程和访问权限审核。

集成的前提条件

如需将 Cloud SQL for SQL Server 与 Microsoft Entra ID 集成,您的实例必须满足以下要求:

  1. 您必须拥有现有的 SQL Server 2022 实例或创建一个新实例。

    Microsoft Entra ID 身份验证仅在 SQL Server 2022 上受支持,在 SQL Server 2017 或 SQL Server 2019 上不受支持。

  2. 启用 Microsoft Entra ID 身份验证。

    在启用 Microsoft Entra ID 身份验证之前,请在 Azure 门户中完成以下步骤:

    1. 查找您的 Microsoft Entra 租户 ID。
    2. 在 Microsoft Entra ID 中创建新的应用注册。

      Cloud SQL for SQL Server 使用此应用与您的 Microsoft Entra 租户 ID 进行通信。创建应用时,请记下应用或客户端 ID。

    3. 授予应用读取目录数据的权限

      1. 选择您刚刚创建的应用注册,然后点击 API 权限
      2. 依次选择添加权限 > Microsoft Graph > 应用权限
      3. 授予以下权限集之一:
        • 选项 1。
          • Directory.Read.All
        • 方法 2. 提供更具体的权限。
          • Application.Read.All
          • Group.Read.All
          • User.Read.All
      4. 授予租户范围的管理员同意书,以允许应用使用这些权限。

网络连接

Microsoft Entra ID 是一项公共服务,使用公共端点进行身份验证。为了使 Microsoft Entra ID 身份验证正常工作,您的 Cloud SQL 实例必须能够与这些公共端点建立出站连接。以下部分将根据实例的网络连接配置讨论后续步骤:

具有公共 IP 的实例

如果您的 Cloud SQL 实例配置了公共 IP 地址,则它具有内置的出站互联网访问权限。

虽然 Microsoft Entra ID 身份验证无需额外的网络配置即可正常运行,但在继续操作之前,请先查看限制

具有专用 IP 的实例

如果您的 Cloud SQL 实例仅配置了专用 IP 地址,则无法直接访问互联网。您必须配置出站路径,以允许实例访问 Microsoft 的公共身份端点。Microsoft Entra ID 集成配置取决于您的私有实例的配置方式:

Private Service Connect

如果您的 Cloud SQL 实例配置为使用专用 IP 地址,我们建议使用 Private Service Connect 来启用 Microsoft Entra ID,因为这样可以省去某些维护开销,例如:

  • 管理堡垒主机虚拟机。
  • 维护路线。
  • 创建过于宽泛的路由,例如 PSA 连接所需的路由。

在继续之前,请先查看使用 Microsoft Entra ID 的限制

如需启用连接,您需要在消费者 VPC 中配置 Cloud 网络地址转换 (Cloud NAT)。这样一来,启用 PSC 的实例就可以使用 Cloud NAT 网关将出站流量发送到公共 Microsoft 端点。启用后,内部路由会限制流量,以便只有与 Microsoft Entra ID 相关的流量到达 Cloud NAT 实例。

如需启用连接,请完成以下必需步骤:

  1. 创建已启用 PSC 的实例。
  2. 为 Cloud SQL 实例配置出站连接。
  3. 创建 Cloud NAT 网关。

专用服务访问通道

如果您的 Cloud SQL 实例配置为使用专用 IP 地址,并且您使用 PSA,则需要执行以下步骤才能启用与 Microsoft Entra ID 的连接:

  1. 在 VPC 中部署堡垒主机虚拟机

    在项目中创建堡垒主机虚拟机时,必须启用 IP 转发。如果您创建了基于 Linux 的堡垒主机虚拟机,请配置您刚刚创建的堡垒主机虚拟机以执行 IP 转发:

    sudo sysctl net.ipv4.conf.all.forwarding=1
    sudo iptables --table nat --append POSTROUTING --out-interface  ens4 -j MASQUERADE
    
  2. 配置必要的网络路由,以将 Microsoft Entra ID 身份验证流量从 Cloud SQL 实例通过堡垒主机虚拟机主机定向到互联网。

    为每个 Microsoft Entra ID 端点添加相应的路由。您可以在 Azure IP 范围和服务标记资源文件的 AzureActiveDirectory.ServiceEndpoint 部分中找到当前的 IP 范围。

    gcloud

    针对每个 Microsoft Entra ID IP 范围创建两条路由,并将 VM_NAMEVM_ZONE 替换为堡垒主机虚拟机的实际名称和可用区:

    gcloud --project=PROJECT_ID compute routes create NAME \
      --network=NETWORK --destination-range=RANGE \
      --priority=998 --next-hop-gateway=default-internet-gateway
    
    gcloud  --project=PROJECT_ID compute routes create NAME \
      --network=NETWORK --destination-range=RANGE --priority=999 \
      --next-hop-instance=VM_NAME --next-hop-instance-zone=VM_ZONE \
      --next-hop-ilb=ILB_VALUE
    

    替换以下内容:

    • PROJECT_ID:Cloud SQL 实例所在项目的 ID。
    • NAME:您要创建的路由的名称。
    • NETWORK:Cloud SQL 实例所在的网络的名称。
    • RANGE:您要使用的 IP 范围。
    • VM_NAME:您要添加的堡垒主机虚拟机的名称。
    • VM_ZONE:要包含的堡垒主机虚拟机的可用区,例如 us-central1
    • ILB_VALUE:可选。内部 TCP/UDP 负载均衡器的转发规则的名称或 IP 地址。如果您在堡垒主机虚拟机前面配置了负载均衡器,则需要在该命令中添加 --next-hop-ilb 标志。

      如需了解详情,请参阅内部直通式网络负载平衡器作为下一个跃点

    一个示例可能如下所示:

    gcloud  --project=my-customer-project compute routes create my-route-1 --network=default --destination-range=20.20.32.0/27 --priority=998 --next-hop-gateway=default-internet-gateway
    
    gcloud  --project=my-customer-project compute routes create my-route-2 --network=default --destination-range=20.20.32.0/27 --priority=999 --next-hop-instance=my-bastion-vm --next-hop-instance-zone=us-central1-c --next-hop-ilb=fr-ilb1
    
  3. 使用上一步中的同一命令应用相同配置,以允许流量用于 Microsoft Entra ID 证书吊销检查。使用 DigiCert 证书状态 IP 地址中列出的 IP 范围。

    如果您未完成此步骤,Microsoft Entra ID 身份验证可能仍可正常运行,但您在打开新连接时也可能会遇到延迟。

管理 Microsoft Entra ID 身份验证

您可以为新实例或现有实例启用 Entra ID 身份验证。

创建启用了 Microsoft Entra ID 身份验证的实例

您可以在创建新的 Cloud SQL for SQL Server 实例时启用 Microsoft Entra ID 身份验证。您需要提供在 Azure 门户中配置的应用注册的特定 Microsoft Entra 租户 ID 和应用 ID(客户端 ID)。

如需了解详情,请参阅前提条件

gcloud

gcloud beta sql instances create INSTANCE_NAME \
    --database-version=EDITION \
    --tier=TIER \
    --network=NETWORK
    --root-password=PASSWORD
    --entra-id-tenant-id=TENANT_ID \
    --entra-id-application-id=APPLICATION_ID

替换以下内容:

  • INSTANCE_NAME:要创建的实例的名称。
  • EDITION:您要使用的实例版本,例如 SQLSERVER_2022_STANDARD
  • TIER:您要使用的实例层级或机器类型,例如 db-custom-2-3840
  • NETWORK:您要使用的网络名称。
  • PASSWORD:实例密码。
  • TENANT_ID:Microsoft Entra 租户 ID。
  • APPLICATION_ID:应用或客户端 ID。

一个示例可能如下所示:

gcloud beta sql instances create my-entraid-instance \
    --database-version=SQLSERVER_2022_STANDARD \
    --tier=db-custom-2-3840 \
    --assign-ip \
    --root-password=D61Xv36f!0lE \
    --entra-id-tenant-id=7e281aab-e994-4c83-88ed-d1674477a39c \
    --entra-id-application-id=4c5ed2da-0478-4aaa-ab65-6dfd33ba8bfd

REST v1

下面的基本 API 调用并未显示所有可能的字段。如需查看 JSON 请求的原型,请参阅设置

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您要创建的实例将位于的项目名称。
  • INSTANCE_ID:要创建的实例的 ID。
  • EDITION:您要使用的实例版本,例如 SQLSERVER_2022_STANDARD
  • REGION:您希望实例所在的区域,例如 us-central1
  • PASSWORD:实例密码。
  • TIER:您要使用的实例层级或机器类型,例如 db-custom-2-3840
  • NETWORK:您要使用的网络名称。
  • TENANT_ID:Microsoft Entra 租户 ID。
  • APPLICATION_ID:应用或客户端 ID。

HTTP 方法和网址:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances

请求 JSON 正文:

{
  "databaseVersion":"EDITION",
  "name":"INSTANCE_ID",
  "region":"REGION",
  "rootPassword":"PASSWORD",
  "settings":
  {
    "tier":"TIER",
    "ipConfiguration":
      {
        "privateNetwork":"NETWORK"
      },
    "entraidConfig":
    {
      "tenantId": "TENANT_ID",
      "applicationId": "APPLICATION_ID"
    }
  }
}

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-01T19:13:21.834Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

REST v1beta4

下面的基本 API 调用并未显示所有可能的字段。如需查看 JSON 请求的原型,请参阅设置

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您要创建的实例将位于的项目名称。
  • INSTANCE_ID:要创建的实例的 ID。
  • EDITION:您要使用的实例版本,例如 SQLSERVER_2022_STANDARD
  • REGION:您希望实例所在的区域,例如 us-central1
  • PASSWORD:实例密码。
  • TIER:您要使用的实例层级或机器类型,例如 db-custom-2-3840
  • NETWORK:您要使用的网络名称。
  • TENANT_ID:Microsoft Entra 租户 ID。
  • APPLICATION_ID:应用或客户端 ID。

HTTP 方法和网址:

POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances

请求 JSON 正文:

{
  "databaseVersion":"EDITION",
  "name":"INSTANCE_ID",
  "region":"REGION",
  "rootPassword":"PASSWORD",
  "settings":
  {
    "tier":"TIER",
    "ipConfiguration":
      {
        "privateNetwork":"NETWORK"
      },
    "entraidConfig":
    {
      "tenantId": "TENANT_ID",
      "applicationId": "APPLICATION_ID"
    }
  }
}

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-01T19:13:21.834Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

在现有实例上管理 Microsoft Entra ID 身份验证

您可以随时在现有实例上启用、修改或停用 Microsoft Entra ID 配置。

如需修改实例的配置,您必须使用新的或已删除的租户 ID 和应用(客户端)ID 值修补实例。

此过程不涉及加入或退出网域。

您可以在不启用或停用与 Microsoft Entra ID 的集成的情况下更新租户 ID 和应用 ID 值。

gcloud

gcloud beta sql instances patch INSTANCE_NAME \
    --entra-id-tenant-id="NEW_TENANT_ID" \
    --entra-id-application-id="NEW_APPLICATION_ID"

替换以下内容:

  • INSTANCE_NAME:要修改的实例的名称。
  • NEW_TENANT_ID:新的 Microsoft Entra 租户 ID。如需停用 Microsoft Entra ID,请将此字符串留空。
  • NEW_APPLICATION_ID:新的应用或客户端 ID。如需停用 Microsoft Entra ID,请将此字符串留空。

一个示例可能如下所示:

gcloud beta sql instances patch my-existing-instance \
    --entra-id-tenant-id=7e281aab-e994-4c83-88ed-d1674477a39c \
    --entra-id-application-id=4c5ed2da-0478-4aaa-ab65-6dfd33ba8bfd

REST v1

下面的基本 API 调用并未显示所有可能的字段。如需查看 JSON 请求的原型,请参阅设置

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您要修改的实例所在项目的 ID。
  • INSTANCE_ID:要修改的实例的 ID。
  • TENANT_ID:Microsoft Entra 租户 ID。如需停用 Microsoft Entra ID,请将此字符串留空。
  • APPLICATION_ID:应用或客户端 ID。如需停用 Microsoft Entra ID,请将此字符串留空。

HTTP 方法和网址:

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances

请求 JSON 正文:

{
  "settings":
  {
    "entraidConfig":
    {
      "tenantId": "NEW_TENANT_ID",
      "applicationId": "NEW_APPLICATION_ID"
    }
  }
}

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-01T19:13:21.834Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

REST v1beta4

下面的基本 API 调用并未显示所有可能的字段。如需查看 JSON 请求的原型,请参阅设置

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您要修改的实例所在项目的 ID。
  • INSTANCE_ID:要修改的实例的 ID。
  • TENANT_ID:Microsoft Entra 租户 ID。如需停用 Microsoft Entra ID,请将此字符串留空。
  • APPLICATION_ID:应用或客户端 ID。如需停用 Microsoft Entra ID,请将此字符串留空。

HTTP 方法和网址:

PATCH https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances

请求 JSON 正文:

{
  "settings":
  {
    "entraidConfig":
    {
      "tenantId": "NEW_TENANT_ID",
      "applicationId": "NEW_APPLICATION_ID"
    }
  }
}

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-01T19:13:21.834Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

将证书添加到应用

为了让 Microsoft Entra ID 对您的 Cloud SQL for SQL Server 实例进行身份验证,您必须将 Cloud SQL for SQL Server 实例的公共证书上传到 Microsoft Entra ID 应用注册。

  1. 在实例上启用 Microsoft Entra ID 身份验证后,请为 Microsoft Entra ID 创建特定于实例的证书

    gcloud

    gcloud beta sql ssl entraid-certs create --instance=INSTANCE_NAME
    

    替换以下内容:

    • INSTANCE_NAME:您要为其创建证书的实例的名称。

    REST v1

    在使用任何请求数据之前,请先进行以下替换:

    • PROJECT_ID:实例所在项目的 ID。
    • INSTANCE_ID:实例的 ID。

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/addEntraIdCertificate

    如需发送您的请求,请展开以下选项之一:

    您应该收到类似以下内容的 JSON 响应:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-01T19:13:21.834Z",
      "operationType": "CREATE",
      "name": "OPERATION_ID",
      "targetId": "INSTANCE_ID",
      "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
      "targetProject": "PROJECT_ID"
    }
    

    REST v1beta4

    在使用任何请求数据之前,请先进行以下替换:

    • PROJECT_ID:实例所在项目的 ID。
    • INSTANCE_ID:实例的 ID。

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/addEntraIdCertificate

    如需发送您的请求,请展开以下选项之一:

    您应该收到类似以下内容的 JSON 响应:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-01T19:13:21.834Z",
      "operationType": "CREATE",
      "name": "OPERATION_ID",
      "targetId": "INSTANCE_ID",
      "selfLink": "https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
      "targetProject": "PROJECT_ID"
    }
    
  2. 通过检索实例的详细信息,获取您刚刚创建的证书的详细信息:

    gcloud

    gcloud beta sql ssl entraid-certs list --instance=INSTANCE_NAME --format="value(ssl_cert.cert)"
    

    替换以下内容:

    • INSTANCE_NAME:与您刚刚创建的证书相关联的实例的名称。

    REST v1

    在使用任何请求数据之前,请先进行以下替换:

    • PROJECT_ID:实例所在项目的 ID。
    • INSTANCE_ID:实例的 ID。

    HTTP 方法和网址:

    GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/listEntraIdCertificates

    如需发送您的请求,请展开以下选项之一:

    您应该会收到一个成功的状态代码 (2xx) 和一个空响应。

    此命令会输出一个证书,您可以将其保存到文件中,然后稍后上传到 Azure 门户。

    您必须从文件中移除所有嵌入的换行符,并手动分隔每个新行。否则会导致文件上传失败。

    例如,您可能会收到类似如下内容的文本字符串:

    Line1\Line2\Line3
    

    您必须手动分隔每一行,如下所示:

    Line1
    Line2
    Line3
    

    或者,如果您不想手动执行此任务,请使用以下命令:

    curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -H "x-goog-user-project: PROJECT_ID" "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME/listEntraIdCertificates" -s | jq -r '.certs[0].cert'
    

    替换以下内容:

    • PROJECT_ID:实例所在项目的 ID。
    • INSTANCE_NAME:与您刚刚创建的证书相关联的实例的名称。

    REST v1beta4

    在使用任何请求数据之前,请先进行以下替换:

    • PROJECT_ID:实例所在项目的 ID。
    • INSTANCE_ID:实例的 ID。

    HTTP 方法和网址:

    GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/listEntraIdCertificates

    如需发送您的请求,请展开以下选项之一:

    您应该会收到一个成功的状态代码 (2xx) 和一个空响应。

    此命令会输出一个证书,您可以将其保存到文件中,然后稍后上传到 Azure 门户。

    您必须从文件中移除所有嵌入的换行符,并手动分隔每个新行。否则会导致文件上传失败。

    例如,您可能会收到类似如下内容的文本字符串:

    Line1\Line2\Line3
    

    您必须手动分隔每一行,如下所示:

    Line1
    Line2
    Line3
    

    或者,如果您不想手动执行此任务,请使用以下命令:

    curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -H "x-goog-user-project: PROJECT_ID" "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME/listEntraIdCertificates" -s | jq -r '.certs[0].cert'
    

    替换以下内容:

    • PROJECT_ID:实例所在项目的 ID。
    • INSTANCE_NAME:与您刚刚创建的证书相关联的实例的名称。
  3. 将证书添加到 Azure 门户。

    1. 在 Azure 门户中前往您的应用注册
    2. 打开证书和密钥
    3. 选择上传证书。浏览到您从实例中检索到的证书文件,然后添加该文件。
    4. 点击确定

轮替 Microsoft Entra ID 证书

您必须在 Microsoft Entra ID 证书过期之前轮替证书。我们建议您在预定的过期日期前至少一周开始此流程:

  1. 按照向应用添加证书中的步骤,在 Cloud SQL for SQL Server 实例上创建新的非活动证书,然后使用 Azure 门户将其上传到 Microsoft Entra ID。这不会影响当前有效的证书。

  2. 在 Cloud SQL for SQL Server 实例上激活新证书,这会触发 Cloud SQL for SQL Server 开始使用新证书进行所有新的身份验证。

    gcloud

    gcloud beta sql ssl entraid-certs rotate --instance=INSTANCE_NAME
    

    替换以下内容:

    • INSTANCE_NAME:与您要轮换的证书关联的实例的名称。

    REST v1

    在使用任何请求数据之前,请先进行以下替换:

    • PROJECT_ID:实例所在项目的 ID。
    • INSTANCE_ID:实例的 ID。

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/rotateEntraIdCertificate

    如需发送您的请求,请展开以下选项之一:

    您应该会收到一个成功的状态代码 (2xx) 和一个空响应。

    REST v1beta4

    在使用任何请求数据之前,请先进行以下替换:

    • PROJECT_ID:实例所在项目的 ID。
    • INSTANCE_ID:实例的 ID。

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/rotateEntraIdCertificate

    如需发送您的请求,请展开以下选项之一:

    您应该会收到一个成功的状态代码 (2xx) 和一个空响应。

  3. 您的实例现在使用新证书。

    您可以安全地从 Microsoft Entra ID 应用注册和 Cloud SQL for SQL Server 实例中移除旧证书。如需了解详情,请参阅在 Microsoft Entra ID 中添加和管理应用凭证

回滚 Microsoft Entra ID 证书

如果您在轮替到新证书后遇到问题,可以回滚到先前的证书。

如需执行回滚,之前的证书必须仍然有效,并且必须仍然受到 Microsoft Entra ID 应用注册的信任。

以下命令会立即在 Cloud SQL for SQL Server 实例上重新激活指定的旧证书。

gcloud

gcloud beta sql ssl entraid-certs rollback --instance=INSTANCE_NAME

替换以下内容:

  • INSTANCE_NAME:与您要回滚的证书关联的实例的名称。

REST v1

下面的基本 API 调用并未显示所有可能的字段。如需查看 JSON 请求的原型,请参阅设置

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:实例所在项目的 ID。
  • INSTANCE_ID:您要回滚证书的实例的 ID。
  • CERTIFICATE_NAME:您要用于替换旧证书的新证书的名称,例如 sha1Fingerprint

HTTP 方法和网址:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/rollbackEntraIdCertificate

请求 JSON 正文:

{
  {
  "RotateEntraIdCertificateContext": {"nextVersion": "CERTIFICATE_NAME"}
  }
}

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-01T19:13:21.834Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

REST v1beta4

下面的基本 API 调用并未显示所有可能的字段。如需查看 JSON 请求的原型,请参阅设置

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:实例所在项目的 ID。
  • INSTANCE_ID:您要回滚证书的实例的 ID。
  • CERTIFICATE_NAME:您要用于替换旧证书的新证书的名称,例如 sha1Fingerprint

HTTP 方法和网址:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/rollbackEntraIdCertificate

请求 JSON 正文:

{
  {
  "RotateEntraIdCertificateContext": {"nextVersion": "CERTIFICATE_NAME"}
  }
}

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-01T19:13:21.834Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

创建初始 Microsoft Entra ID 登录

在实例上启用 Microsoft Entra ID 身份验证后,您需要创建 Microsoft Entra ID 登录名。

  1. 创建第一个 Microsoft Entra ID 登录名。

    此初始登录名(代表 Microsoft Entra ID 用户或群组)无法使用 T-SQL 创建。您必须使用 gcloud CLI 或 Cloud SQL Admin API 创建该用户:

    gcloud

    gcloud sql users create USER_NAME --instance=INSTANCE_NAME --type=ENTRAID_USER
    

    替换以下内容:

    • USER_NAME:您要创建的 Cloud SQL for SQL Server 用户的名称。
    • INSTANCE_NAME:您要为其创建 Microsoft Entra ID 登录信息的实例的名称。
    • ENTRAID_USER:Microsoft Entra ID 用户名。

    一个示例可能如下所示:

    gcloud sql users create myentraiduser@mytenant.com --instance=my-entraid-instance --type=ENTRAID_USER
    

    REST v1

    下面的基本 API 调用并未显示所有可能的字段。如需查看 JSON 请求的原型,请参阅设置

    在使用任何请求数据之前,请先进行以下替换:

    • PROJECT_ID:实例所在项目的 ID。
    • INSTANCE_ID:要更新的实例的 ID。
    • USER_NAME:您要创建的 Cloud SQL for SQL Server 用户的名称。
    • ENTRAID_USER:Microsoft Entra ID 用户名。

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users

    请求 JSON 正文:

    {
      "name": "USER_NAME"
      "type": "ENTRAID_USER"
    }
    

    如需发送您的请求,请展开以下选项之一:

    您应该收到类似以下内容的 JSON 响应:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-01T19:13:21.834Z",
      "operationType": "CREATE",
      "name": "OPERATION_ID",
      "targetId": "INSTANCE_ID",
      "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
      "targetProject": "PROJECT_ID"
    }
    

    REST v1beta4

    下面的基本 API 调用并未显示所有可能的字段。如需查看 JSON 请求的原型,请参阅设置

    在使用任何请求数据之前,请先进行以下替换:

    • PROJECT_ID:实例所在项目的 ID。
    • INSTANCE_ID:要更新的实例的 ID。
    • USER_NAME:您要创建的 Cloud SQL for SQL Server 用户的名称。
    • ENTRAID_USER:Microsoft Entra ID 用户名。

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users

    请求 JSON 正文:

    {
      "name": "USER_NAME"
      "type": "ENTRAID_USER"
    }
    

    如需发送您的请求,请展开以下选项之一:

    您应该收到类似以下内容的 JSON 响应:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-01T19:13:21.834Z",
      "operationType": "CREATE",
      "name": "OPERATION_ID",
      "targetId": "INSTANCE_ID",
      "selfLink": "https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
      "targetProject": "PROJECT_ID"
    }
    

    创建初始 Microsoft Entra ID 登录信息后,您就可以以该用户身份连接到数据库。

  2. 创建后续 Microsoft Entra ID 登录信息。

    您可以创建和管理其他 Microsoft Entra ID 登录信息,如上一步中所述。

    或者,如果您更喜欢使用其他工具(例如 SQL Server Management Studio (SSMS)),则必须先授予初始登录名管理其他登录名的权限:

    GRANT ALTER ANY LOGIN TO [ENTRA_ID_USER] AS CustomerDbRootRole
    

    ENTRAID_USER 替换为 Microsoft Entra ID 用户名。

    授予权限后,此登录名可以使用标准 T-SQL 命令创建和管理其他 Microsoft Entra ID 登录名。示例命令可能类似于以下形式:

    CREATE LOGIN [<<ENTRA_ID_USER>>] FROM EXTERNAL PROVIDER
    

    ENTRAID_USER 替换为 Microsoft Entra ID 用户名。

    如需基于 Microsoft Entra ID 登录信息创建用户或授予权限,请使用标准 T-SQL 命令。

    如需了解详情(包括如何使用正确的语法创建登录名),请参阅为 SQL Server 设置 Microsoft Entra 身份验证(通过应用注册)

最佳做法

为了帮助隔离权限并更好地定义安全边界,我们强烈建议您为每个 Cloud SQL for SQL Server 实例创建唯一的 Microsoft Entra ID 应用注册。撤消应用的凭据不会影响其他无关的实例。

如需了解详情,请参阅如何在 Microsoft Entra ID 中注册应用

问题排查

以下部分有助于解决您在管理 Microsoft Entra ID 集成时可能遇到的问题。

专用 IP 实例的网络连接问题

在集成设置过程中,您可能会遇到以下部分问题:

  • 创建 Microsoft Entra ID 登录信息的缓慢操作
  • 无法创建 Microsoft Entra ID 登录信息
  • 无法使用 Microsoft Entra ID 身份验证连接到实例

为帮助解决这些问题,请执行以下连接测试:

  1. 在同一 Google Cloud 项目和 VPC 中,以及在 Cloud SQL for SQL Server 实例所在的同一区域中,创建一个仅配置了专用 IP 的测试虚拟机。

  2. 使用远程桌面协议 (RDP) 或安全 Shell 协议 (SSH) 连接到您刚刚创建的虚拟机。然后,运行以下命令来测试可达性。以下步骤适用于基于 Linux 和基于 Windows 的虚拟机:

    curl -4iv login.microsoftonline.com
    curl -4iv graph.microsoft.com
    curl -4iv ocsp.digicert.com
    

如果您无法访问上述任何端点(无论是由于超时还是连接被拒错误),请检查您的网络配置,看看是否存在以下问题:

  • 对于 Private Service Connect,请确保 Cloud NAT 已正确配置,以允许出站互联网访问。
  • 对于专用服务访问通道,请验证您的自定义路由和堡垒主机配置。
  • 检查您的 VPC 防火墙规则,确保出站流量不会被屏蔽。

常见的错误消息

在 Microsoft Entra ID 身份验证期间,您可能会遇到以下登录错误:

Login failed for user ""

如需解决此问题,请确保此 Microsoft Entra ID 用户存在 SQL Server 登录名。

从 Microsoft Active Directory 迁移

在以下情况下,您可以启用 Microsoft Entra ID 身份验证,而无需停用现有的 Microsoft Active Directory 身份验证:

只读副本

  • 如果您向启用了 Microsoft Entra ID 的主实例添加只读副本,系统会自动将该只读副本配置为使用 Microsoft Entra ID。
  • 如果主实例已启用 Microsoft Entra ID,并且您将备份恢复到该实例,则其关联的读取副本会自动配置为使用 Microsoft Entra,因为身份不会更改。

克隆实例和恢复到不同实例

在以下情况下,系统不会自动为新实例配置 Microsoft Entra ID 集成:

  • 主实例的克隆。
  • 恢复到非主实例的备份。

在这种情况下,您必须在新实例上手动启用 Microsoft Entra ID,然后将其证书重新上传到 Microsoft Entra ID 应用。此要求是一项安全措施,旨在防止多个无关的实例使用相同的应用身份。

限制

  • Microsoft Entra ID 身份验证仅在 SQL Server 2022 上受支持,在 SQL Server 2017 或 SQL Server 2019 上不受支持。
  • 如果您克隆实例或将备份恢复到其他实例,则新实例不会自动配置 Microsoft Entra ID 集成。如需了解详情,请参阅备份和恢复
  • 对于配置了公共 IP 的高可用性 (HA) 实例,不支持 Microsoft Entra ID 身份验证。
  • PSC 启用的主实例及其对应的只读副本实例不支持 Microsoft Entra ID 身份验证。
  • 避免在附加了副本的主实例上轮换 Microsoft Entra ID 证书。如果您轮换主实例的证书,副本证书不会更新。
  • 您可以使用 gcloud CLI 或 Cloud SQL Admin API 配置 Microsoft Entra ID 与 Cloud SQL for SQL Server 的集成。无法使用 Terraform 管理集成。

后续步骤