将数据库实例加入自托管式 Active Directory
要将 RDS for SQL Server 数据库实例加入自托管式 AD,请执行以下步骤:
步骤 1:创建或修改 SQL Server 数据库实例
您可以使用控制台、CLI 或 RDS API 将 RDS for SQL Server 数据库实例与自托管式 AD 域关联。您可以通过下列方式之一来执行该操作:
-
使用控制台、create-db-instance CLI 命令或 CreateDBInstance RDS API 操作创建新的 SQL Server 数据库实例。
有关说明,请参阅创建 Amazon RDS 数据库实例。
-
使用控制台、modify-db-instance CLI 命令或 ModifyDBInstance RDS API 操作修改现有 SQL Server 数据库实例。
有关说明,请参阅修改 Amazon RDS 数据库实例。
-
使用控制台、restore-db-instance-from-db-snapshot CLI 命令或 RestoreDBInstanceFromDBSnapshot RDS API 操作,从数据库快照还原 SQL Server 数据库实例。
有关说明,请参阅还原到数据库实例。
-
使用控制台、restore-db-instance-to-point-in-time CLI 命令或 RestoreDBInstanceToPointInTime RDS API 操作,将 SQL Server 数据库实例还原到某个时间点。
有关说明,请参阅将 Amazon RDS 的数据库实例还原到指定时间。
使用 Amazon CLI 时,数据库实例需要以下参数才能使用您创建的自托管式 AD 域:
-
对于
--domain-fqdn参数,请使用自托管式 AD 的完全限定域名(FQDN)。 -
对于
--domain-ou参数,请使用您在自托管式 AD 中创建的 OU。 -
对于
--domain-auth-secret-arn参数,使用您在上一步中创建的密钥 ARN 的值。 -
对于
--domain-dns-ips参数,请使用自托管式 AD 的 DNS 服务器的主要 IPv4 地址和辅助 IPv4 地址。如果您没有辅助 DNS 服务器 IP 地址,请输入主 IP 地址两次。
以下示例 CLI 命令显示了如何创建、修改和删除已加入自托管式 AD 域的 RDS for SQL Server 数据库实例。
重要
如果您修改数据库实例,将其加入自托管式 AD 域或将其从自托管式 AD 域中删除,则需要重启数据库实例才能使修改生效。您可以选择立即应用更改,也可以等到下一个维护时段。选择立即应用选项将导致单可用区数据库实例停机。多可用区数据库实例将在完成重启之前执行失效转移。有关更多信息,请参阅 使用计划修改设置。
以下 CLI 命令创建一个新的 RDS for SQL Server 数据库实例并将其加入自托管式 AD 域。
对于 Linux、macOS 或 Unix:
aws rds create-db-instance \ --db-instance-identifiermy-DB-instance\ --db-instance-classdb.m5.xlarge\ --allocated-storage50\ --enginesqlserver-se\ --engine-version15.00.4043.16.v1\ --license-modellicense-included\ --master-usernamemy-master-username\ --master-user-passwordmy-master-password\ --domain-fqdnmy_AD_domain.my_AD.my_domain\ --domain-ouOU=my-AD-test-OU,DC=my-AD-test,DC=my-AD,DC=my-domain\ --domain-auth-secret-arn"arn:aws:secretsmanager:region:account-number:secret:my-AD-test-secret-123456"\ --domain-dns-ips"10.11.12.13" "10.11.12.14"
对于:Windows
aws rds create-db-instance ^ --db-instance-identifiermy-DB-instance^ --db-instance-classdb.m5.xlarge^ --allocated-storage50^ --enginesqlserver-se^ --engine-version15.00.4043.16.v1^ --license-modellicense-included^ --master-usernamemy-master-username^ --master-user-passwordmy-master-password^ --domain-fqdnmy-AD-test.my-AD.mydomain^ --domain-ouOU=my-AD-test-OU,DC=my-AD-test,DC=my-AD,DC=my-domain^ --domain-auth-secret-arn"arn:aws:secretsmanager:region:account-number:secret:my-AD-test-secret-123456" \^ --domain-dns-ips"10.11.12.13" "10.11.12.14"
以下 CLI 命令将现有 RDS for SQL Server 数据库实例修改为使用自托管式 AD 域。
对于 Linux、macOS 或 Unix:
aws rds modify-db-instance \ --db-instance-identifiermy-DB-instance\ --domain-fqdnmy_AD_domain.my_AD.my_domain\ --domain-ouOU=my-AD-test-OU,DC=my-AD-test,DC=my-AD,DC=my-domain\ --domain-auth-secret-arn"arn:aws:secretsmanager:region:account-number:secret:my-AD-test-secret-123456"\ --domain-dns-ips"10.11.12.13" "10.11.12.14"
对于:Windows
aws rds modify-db-instance ^ --db-instance-identifiermy-DBinstance^ --domain-fqdnmy_AD_domain.my_AD.my_domain^ --domain-ouOU=my-AD-test-OU,DC=my-AD-test,DC=my-AD,DC=my-domain^ --domain-auth-secret-arn"arn:aws:secretsmanager:region:account-number:secret:my-AD-test-secret-123456"^ --domain-dns-ips"10.11.12.13" "10.11.12.14"
以下 CLI 命令从自托管式 AD 域中删除 RDS for SQL Server 数据库实例。
对于 Linux、macOS 或 Unix:
aws rds modify-db-instance \ --db-instance-identifiermy-DB-instance\ --disable-domain
对于:Windows
aws rds modify-db-instance ^ --db-instance-identifiermy-DB-instance^ --disable-domain
步骤 2:使用 Kerberos 或 NTLM 身份验证
NTLM 身份验证
每个 Amazon RDS 数据库实例都有一个端点,每个端点都包含数据库实例的 DNS 名称和端口号。要使用 SQL 客户端应用程序连接到数据库实例,您需要该数据库实例的 DNS 名称和端口号。要使用 NTLM 身份验证进行身份验证,必须连接到 RDS 端点,或者如果您使用多可用区部署,则必须连接到侦听器端点。
在计划内数据库维护或计划外服务中断期间,Amazon RDS 将自动失效转移到最新辅助数据库,以便操作能够在不进行手动干预的情况下快速恢复。主实例和辅助实例使用相同的端点,其物理网络地址作为失效转移过程的一部分转换到辅助实例。在失效转移时,您不必重新配置应用程序。
Kerberos 身份验证
RDS for SQL Server 的基于 Kerberos 的身份验证要求连接到特定的服务主体名称(SPN)。但是,在失效转移事件发生后,应用程序可能不知道新 SPN。为了解决这个问题,RDS for SQL Server 提供了一个基于 Kerberos 的端点。
基于 Kerberos 的端点遵循一种特定的格式。如果您的 RDS 端点为 ,则相应基于 Kerberos 的端点将为 rds-instance-name.account-region-hash.aws-region.rds.amazonaws.com。rds-instance-name.account-region-hash.aws-region.awsrds.fully qualified domain name (FQDN)
例如,如果 RDS 端点为 ad-test.cocv6zwtircu.us-east-1.rds.amazonaws.com,域名为 corp-ad.company.com,则基于 Kerberos 的端点将为 ad-test.cocv6zwtircu.us-east-1.awsrds.corp-ad.company.com。
这个基于 Kerberos 的端点可用于使用 Kerberos 对 SQL Server 实例进行身份验证,即使在失效转移事件发生后也是如此,因为端点会自动更新为指向主 SQL Server 实例的新 SPN。
查找您的 CNAME
要查找您的 CNAME,请连接到域控制器并打开 DNS 管理器。导航到正向查找区域和您的 FQDN。
浏览 awsrds、aws-region,以及账户和区域特定的哈希值。
如果从远程客户端连接 CNAME 后返回了 NTLM 连接,请检查所需端口是否已列入允许列表。
要检查您的连接是否使用 Kerberos,请运行以下查询:
SELECT net_transport, auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@SSPID;
如果您的实例在连接到 Kerberos 端点时返回 NTLM 连接,请验证您的网络配置和用户配置。请参阅配置您的网络连接。
步骤 3:创建 Windows 身份验证 SQL Server 登录名
使用 Amazon RDS 主用户凭证连接 SQL Server 数据库实例,就像连接任何其他数据库实例一样。由于数据库实例已加入自托管式 AD 域,因此您可以预调配 SQL Server 登录名和用户。您可以通过自托管式 AD 域中的 AD 用户和组实用程序执行此操作。通过对这些 Windows 登录名授予和撤销标准 SQL Server 权限来管理数据库权限。
为了使自托管式 AD 域服务账户能够在 SQL Server 上进行身份验证,自托管式 AD 域服务账户或该用户所属的自托管式 AD 组必须存在 SQL Server Windows 登录名。访问权限的精细控制是通过对这些 SQL Server 登录名授予和撤销权限来处理的。自托管式 AD 域服务账户没有 SQL Server 登录名,或者用户所属自托管式 AD 组中的登录名无法访问 SQL Server 数据库实例。
创建自托管式 AD SQL Server 登录名需要 ALTER ANY LOGIN 权限。如果您尚未使用此权限创建任何登录名,请使用 SQL Server 身份验证以数据库实例的主用户身份进行连接,并在主用户的上下文下创建自托管式 AD SQL Server 登录名。
您可以运行数据定义语言(DDL)命令(如以下示例),为自托管式 AD 域服务账户或组创建 SQL Server 登录名。
注意
使用 Windows 2000 之前的登录名称指定用户和组,格式为 。您不能使用 my_AD_domain\my_AD_domain_usermy_AD_domain_user@ 格式的用户主体名 (UPN)。my_AD_domain
USE [master] GO CREATE LOGIN [my_AD_domain\my_AD_domain_user] FROM WINDOWS WITH DEFAULT_DATABASE = [master], DEFAULT_LANGUAGE = [us_english]; GO
有关更多信息,请参阅 Microsoft 开发人员网络文档中的 CREATE LOGIN (Transact-SQL)
域中用户(人和应用程序)现在均可从加入自托管式 AD 域的客户端计算机使用 Windows 身份验证连接到 RDS for SQL Server 实例。