本页面包含在您开始集成之前需要查看的信息。 查看以下信息(包括限制)后,请参阅使用客户管理的 Active Directory。
您可以将 Cloud SQL for SQL Server 与客户管理的 Microsoft Active Directory(也称为客户管理的 AD [CMAD])集成。
您可以通过 CMAD 进行身份验证、授权等。例如,将实例加入 CMAD 网域后,您可以使用基于 AD 的身份进行 Windows 身份验证登录。将 Cloud SQL for SQL Server 与 AD 网域集成还具有 Google Cloud 与本地 AD 网域集成的额外优势。
准备工作
您可以与 CMAD 集成,从而为实例添加对 Windows 身份验证的支持。不过,在集成之前,您的Google Cloud 项目需要满足以下条件:
- 为了使身份验证正常工作,您的 Cloud SQL 实例必须与所有相关的 Active Directory 网域建立网络连接。这包括实例加入的主网域,以及包含需要访问 Cloud SQL for SQL Server 的用户的任何可信网域或子网域。为此,请确保 Cloud SQL 实例与所有域控制器之间的以下端口(TCP 和 UDP)已打开:
53、88、135、389、445、464、3268、3269以及49152到65535。 - 您必须创建一个组织部门 (OU) 来存储所有相关的集成对象。
- 在此组织部门中,您还需要一个具有以下权限的管理员账号:
- 创建计算机对象
- 删除计算机对象
- 创建用户对象
- 删除用户对象
- 写入所有属性
- 重置密码
- 读取锁定时间、写入锁定时间
- 我们还建议授予此管理员账号管理 DNS 记录的权限,例如,通过将其添加到 DnsAdmins 组来实现此目的。
如果您不授予这些权限,集成仍会成功。 不过,如以用户身份连接到实例中所述,连接到实例需要您手动创建必要的 DNS 记录。
另一种方法是使用实例的 IP 地址进行连接,但这有限制,并且不适用于来自受信任网域的连接。
- 在此组织部门中,您还需要一个具有以下权限的管理员账号:
- 您必须使用以下 JSON 格式将管理员凭证存储在 Secret Manager 中的 Secret 内:
{ "credentials": [ { "validAfterUTC": "VALID_AFTER_UTC_VALUE", "administratorLogin": "ADMINISTRATOR_LOGIN_VALUE_1", "administratorPassword": "ADMINISTRATOR_PASSWORD_VALUE_1" }, { "validAfterUTC": "VALID_AFTER_UTC_VALUE_2", "administratorLogin": "ADMINISTRATOR_LOGIN_VALUE_2", "administratorPassword": "ADMINISTRATOR_PASSWORD_VALUE_2" } ] }
替换以下内容:
- VALID_AFTER_UTC_VALUE_1:您要使用的第一个世界协调时间 (UTC) 值,格式为
YYYY-MM-DDThh:mm:ssZ。示例:2099-07-01T10:30:00Z。 - ADMINISTRATOR_LOGIN_VALUE_1:您要使用的第一个管理员登录名,例如
myadmin。不要在值中包含域名。不支持类似于myadmin@my-domain-name.com的条目。 - ADMINISTRATOR_PASSWORD_VALUE_1:管理员密码。
- VALID_AFTER_UTC_VALUE_2:您要使用的第二个世界协调时间 (UTC) 值,格式为
YYYY-MM-DDThh:mm:ssZ。示例:2099-07-01T10:30:00Z。 - ADMINISTRATOR_LOGIN_VALUE_2:您要使用的第二个管理员登录名,例如
myadmin2。同样,不要在值中包含域名。不支持类似于myadmin2@my-domain-name.com的条目。 - ADMINISTRATOR_PASSWORD_VALUE_2:第二个管理员的密码。
此文件可以包含多个凭证条目,以缓解传播缓慢的问题或适应计划内的主动轮替。
validAfterUTC是可选字段,如果未指定,则假定凭证始终有效。我们建议将这些凭证永久保存在 Secret Manager 中,并在轮替凭证时使用自动化工具更新密码。虽然您可以在创建实例后删除 Secret,但请注意,未来的操作(例如克隆或添加读取副本)会导致新实例无法加入网域。
此外,删除原始实例会在 CMAD 中留下孤立的对象,例如计算机账号。
- VALID_AFTER_UTC_VALUE_1:您要使用的第一个世界协调时间 (UTC) 值,格式为
- 准备客户管理的 Active Directory 的 DNS 服务器 IP 地址列表,通常是您的域控制器。建议为这些服务器使用静态 IP 地址。
- 分配针对每个产品、每个项目的服务账号。
创建和配置服务账号
如需创建具有所需权限的服务账号,请验证以下内容:
- 您必须启用 Cloud SQL Admin API。
- 您必须具有以下权限:
- resourcemanager.projects.setIamPolicy
- secretmanager.secrets.getIamPolicy
- secretmanager.secrets.setIamPolicy
对于您计划与 CMAD 集成的每个项目,您都需要一个针对每个产品、每个项目的服务账号。使用 gcloud CLI 在项目级层创建账号。针对每个产品、每个项目的服务账号都应被授予在上一步中创建的 Secret 的
secretmanager.secrets.getIamPolicy和secretmanager.secrets.setIamPolicy权限。如需了解详情,请参阅 Secret Manager 权限。建议您创建具有所需权限的自定义角色。
如需使用 gcloud CLI 创建服务账号,请运行以下命令:
gcloud beta services identity create --service=sqladmin.googleapis.com
--project=PROJECT_ID
该命令会返回以下格式的服务账号名称:
service-PROJECT_ID@gcp-sa-cloud-sql.iam.gserviceaccount.com
下面是一个服务账号名称的示例:
service-333445@gcp-sa-cloud-sql.iam.gserviceaccount.com
如需为集成授予必要的权限,请运行以下命令:
gcloud iam roles create secretIamPolicyManager --project=PROJECT_ID
--permissions="secretmanager.secrets.getIamPolicy,secretmanager.secrets.setIamPolicy"
然后运行以下命令:
gcloud secrets add-iam-policy-binding ADCredentials --project="722300452883"
--member="serviceAccount:service-SQL_PROJECT_NUMBER@gcp-sa-cloud-sql.iam.gserviceaccount.com"
--role="projects/PROJECT-ID/roles/secretIamPolicyManager"
如需了解详情,请参阅 gcloud beta services identity create。
与 CMAD 集成的最佳实践
与 CMAD 集成时,我们建议您完成以下步骤。
集成的前提条件
在 Google Cloud 控制台中使用 Active Directory 诊断工具排查本地网域和 Cloud SQL for SQL Server 实例中的 AD 设置问题。跳过与 Managed Service for Microsoft Active Directory 相关的步骤。
与 CMAD 集成的拓扑
Cloud SQL for SQL Server 不支持网域本地群组。不过,您可以使用以下替代方案:
- 直接在 SQL Server 中添加全局群组或个人用户登录名。
- 当所有群组和用户都属于同一林时使用通用群组。
Cloud SQL for SQL Server 不支持将网域本地群组用作登录名。如需向网域用户授予权限,您必须改用全局群组或通用群组,如本部分所述。
方法 1:将用户账号和群组作为登录信息添加到 SQL Server
如果您在多个林中有多个网域,并且有多个全局群组,则可以直接将所有个人用户账号和全局通用群组添加为 SQL Server 的登录名。如需查看方法 1 的示例,请参阅下图:

方法 2:在您的某个网域中定义通用群组
如果您的网域位于同一林中,则您可以在其中一个网域中定义通用群组。然后,您可以将所有个人用户账号和全局通用群组添加为该定义的通用群组的子级,并将该定义的通用群组添加为 SQL Server 的登录名。如需查看方法 2 的示例,请参阅下图:

限制和替代方案
与 CMAD 集成时,存在以下限制:
- 不支持使用 Private Service Connect (PSC) 进行专用连接的 Cloud SQL for SQL Server 实例。请改用专用服务访问通道 (PSA)。
- 不支持网域本地群组,但您可以直接在 SQL Server 中添加全局群组或个人用户登录名。或者,当所有群组和用户都属于同一林时,您可以使用通用群组。
- 如果还有其他受信任的网域,并且您计划使用这些网域中的用户名访问 SQL Server 实例,则这些网域需要通过双向信任进行连接。不支持单向信任和外部信任。
- 通常,系统会为通过 Google Cloud 控制台创建的新用户分配
CustomerDbRootRole角色,该角色包含以下 SQL Server Agent 固定数据库角色:SQLAgentUserRole。但是,通过 SQL Server 直接创建的用户(例如 CMAD 用户)无法获得此角色,也不能使用 SQL Server Agent,因为必须授予此角色的 MSDB 数据库受到保护。 - SQL Server 不支持完全限定域名 (FQDN)。
因此,在创建 SQL Server 登录名时,请使用域名简称,而不是 FQDN。例如,如果您的域名是
ad.mydomain.com,则请为ad\user(而不是ad.mydomain.com\user)创建 SQL Server 登录名。 - 如需访问 SQL Server 实例,请始终使用 FQDN。例如,您可以使用类似于
private.myinstance.us-central1.myproject.cloudsql.mydomain.com的 FQDN。Netbios 名称不受支持,DNS 后缀被省略时也不支持任何简称。 - 您无法通过 Google Cloud 控制台管理基于 Active Directory 用户和群组的 SQL Server 登录名。
- Windows 身份验证不支持外部信任。返回的错误可能如下所示:
此外,根据 Microsoft 建议,使用林信任(而不是外部信任)进行 Kerberos 身份验证。 - 始终使用最新版本的 Secret。Secret 必须处于有效状态,且无法销毁。
Active Directory 端点和 TLS 连接
如果您使用的是 Windows 身份验证,并且希望在不信任服务器证书的情况下建立 TLS 连接,则必须在实例上启用 Windows 身份验证后轮替证书。
如果连接失败,并且您的某个证书是在 2025 年 3 月 15 日之前创建的,您必须再次轮替服务器证书并重试连接。
集成不受支持
与 CMAD 集成时,以下功能不受支持:
- 网域本地群组。
- NTLM 身份验证。
- 使用通过信任关系连接的网域中的 IP 地址登录。
- 具有长名称(超过 63 个字符)的实例。
监控
您可以使用以下指标来监控 CMAD 的状态和健康状况:
cloudsql.googleapis.com/database/active_directory/domain_reachable
此指标报告 Cloud SQL 实例是否可访问 CMAD。它是一款有助于排查网络问题的实用工具:
cloudsql.googleapis.com/database/active_directory/instance_available