您可以将 Cloud SQL for SQL Server 与 Managed Service for Microsoft Active Directory(也称为代管式 Microsoft AD)集成。
本页面包含在您开始集成之前需要查看的信息。查看以下信息(包括限制)后,请参阅将 Cloud SQL 与代管式 Microsoft AD 配合使用。
与代管式 Microsoft AD 集成的优势
您可以通过代管式 Microsoft AD 进行身份验证、授权等。例如,将实例加入代管式 Microsoft AD 域后,您可以使用基于 AD 的身份的 Windows 身份验证进行登录。
将 Cloud SQL for SQL Server 与 AD 域集成具有 Cloud 与本地 AD 域集成的额外优势。
集成的前提条件
您可以与代管式 Microsoft AD 集成,从而为实例添加对 Windows 身份验证的支持。但是,在集成之前,您的 Google Cloud 项目需要具有以下各项:
- 代管式 Microsoft AD 域。如需了解如何设置网域,请参阅创建网域。
- 本地 AD 域需要代管式 AD 信任。请参阅创建单向信任和使用本地 AD 用户创建 Windows 登录 Cloud SQL。
- 如下所述的每个产品、每个项目的服务账号;请参阅创建服务账号。
创建和配置服务账号
您需要为计划与代管式 Microsoft AD 集成的项目提供每个产品、每个项目的服务账号。使用 gcloud
或控制台在项目级层创建账号。每个产品、每个项目的服务账号都应被授予项目的 managedidentities.sqlintegrator
角色。如需了解详情,请参阅 gcloud projects set-iam-policy。
如果您使用的是 Google Cloud 控制台,则 Cloud SQL 会自动为您创建服务账号,并提示您授予 managedidentities.sqlintegrator
角色。
如需使用 gcloud
创建服务账号,请运行以下命令:
gcloud beta services identity create --service=sqladmin.googleapis.com \ --project=[PROJECT]
该命令会返回以下格式的服务账号名称:service-[PROJECT_NUMBER]@gcp-sa-cloud-sql.iam.gserviceaccount.com
下面是一个服务账号名称的示例:service-333445@gcp-sa-cloud-sql.iam.gserviceaccount.com
为集成授予必要的权限需要现有权限。如需了解所需权限,请参阅所需权限。
如需为集成授予必要的权限,请运行以下命令。如果您的 Managed Microsoft AD 位于其他项目中,则 [AD_PROJECT_ID] 应该是包含 Managed Microsoft AD 实例的项目,而服务账号的 [SQL_PROJECT_NUMBER] 应该是包含 SQL Server 实例的项目:
gcloud projects add-iam-policy-binding [AD_PROJECT_ID] \ --member=serviceAccount:service-[SQL_PROJECT_NUMBER]@gcp-sa-cloud-sql.iam.gserviceaccount.com \ --role=roles/managedidentities.sqlintegrator
另请参阅 gcloud beta services identity create。
与代管式 Microsoft AD 集成的最佳做法
规划集成时,请查看以下内容:
- 集成的前提条件
- 与其他项目中的代管式 AD 域集成
- 在 Google Cloud 上运行 Active Directory 的最佳做法
- 代管式 Microsoft AD 文档
- 在其他区域中部署网域控制器
- 在 Google Cloud 控制台中使用 AD 诊断工具排查本地网域和 Cloud SQL for SQL Server 实例中的 AD 设置问题。
SQL Server 实例和代管式 AD 实例位于同一区域可提供最低的网络延迟和最佳性能。因此,请尽量在同一区域中设置 SQL Server 实例和 AD 实例。此外,无论您是否在同一区域中设置这些实例,都可通过设置主要区域和备份区域来实现更高的可用性。
与代管式 Microsoft AD 集成的拓扑
Cloud SQL for SQL Server 不支持网域本地群组。但是您可以:
- 直接在 SQL Server 中添加全局群组或个人用户登录信息
- 当所有群组和用户都属于同一林时使用通用群组
如果支持网域本地群组,则可以将个人用户账号和全局通用群组添加为网域本地群组的子级(可保护对 SQL Server 的访问);这样,您便可以将网域本地群组添加为 SQL Server 的登录信息。在 Cloud SQL for SQL Server 中,您可以启用类似功能,如本部分所述。
方法 1:将用户账号和群组作为登录信息添加到 SQL Server
如果您在多个林中有多个网域,并且有多个全局群组,则可以直接将所有个人用户账号和全局通用群组添加为 SQL Server 的登录信息。如需查看方法 1 的示例,请参阅下图:
方法 2:在您的某个网域中定义通用群组
如果您的网域位于同一林中,则您可以在其中一个网域中定义通用群组。然后,您可以将所有个人用户账号和全局通用群组添加为该定义的通用群组的子级,并将该定义的通用群组添加为 SQL Server 的登录信息。如需查看方法 2 的示例,请参阅下图:
限制和替代方案
与代管式 Microsoft AD 集成时,存在以下限制:
- 不支持网域本地群组,但您可以直接在 SQL Server 中添加全局群组或个人用户登录信息。或者,当所有群组和用户都属于同一林时,您可以使用通用群组。
- 通常,系统会为通过 Google Cloud 控制台创建的新用户分配
CustomerDbRootRole
角色,该角色包含以下 SQL Server Agent 固定数据库角色:SQLAgentUserRole
。但是,通过 SQL Server 直接创建的用户(例如代管式 Microsoft AD 用户)无法获得此角色,也不能使用 SQL Server Agent,因为必须授予此角色的 MSDB 数据库已受到保护。 - 某些受限操作可能会导致以下错误:“无法获取有关 Windows NT 群组/用户的信息”。这种受限操作的一个例子是由来自通过信任关系连接的网域中的用户创建登录信息。另一个例子是向通过信任关系连接的网域中的用户授予权限。在这些情况下,重试操作通常会成功。如果重试失败,请关闭连接并打开新连接。
- Windows 上的 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 登录信息。
- 在 Cloud SQL 中,如果 SQL Server 实例是在 2021 年 3 月 12 日当天或之前创建的,则该实例无法与代管式 Microsoft AD 集成。
- Windows 身份验证不支持外部信任。错误可能如下:“目标主体名称不正确。 无法生成 SSI 上下文”。此外,根据 Microsoft 建议,使用林信任(而不是外部信任)进行 Kerberos 身份验证。
集成不受支持
与代管式 Microsoft AD 集成时,以下功能目前不受支持:
- 网域本地群组。
- 通过信任关系连接的网域中的用户删除 SQL Server 登录。您可以通过代管式网域中的用户或通过
sqlserver
登录来执行此操作。 - NTLM 身份验证。
- 使用通过信任关系连接的网域中的 IP 地址登录。
- 具有长名称(超过 63 个字符)的实例。
后续步骤
- 查看创建代管式 Microsoft AD 域的快速入门。
- 准备创建集成的 Cloud SQL 实例。
- 了解如何在本地网域和代管式 Microsoft AD 域之间创建信任关系。
- 了解如何查看集成实例。