适用于 Babelfish 的 Kerberos 身份验证 - Amazon Aurora

适用于 Babelfish 的 Kerberos 身份验证

适用于 Aurora PostgreSQL 的 Babelfish 15.2 版本支持使用 Kerberos 对数据库集群进行身份验证。当用户连接到 Babelfish 数据库时,这种方法可让您使用 Microsoft Windows 身份验证来验证用户身份。为此,您必须先将数据库集群配置为使用 AWS Directory Service for Microsoft Active Directory 进行 Kerberos 身份验证。有关更多信息,请参阅《AWS Directory Service 管理员指南》中的什么是 AWS Directory Service?

设置 Kerberos 身份验证

适用于 Aurora PostgreSQL 的 Babelfish 数据库集群可以使用两个不同的端口进行连接,但 Kerberos 身份验证设置是一个一次性过程。因此,您必须先为数据库集群设置 Kerberos 身份验证。有关更多信息,请参阅设置 Kerberos 身份验证。完成设置后,确保您可以使用 Kerberos 连接到 PostgreSQL 客户端。有关更多信息,请参阅使用 Kerberos 身份验证进行连接

Babelfish 中的登录信息和用户预调配

通过表格式数据流(TDS)端口创建的 Windows 登录信息可以与 TDS 端口或 PostgreSQL 端口一起使用。首先,可以使用 Kerberos 进行身份验证的登录信息必须先从 TDS 端口进行预调配,然后 T-SQL 用户和应用程序才可以使用此登录信息连接到 Babelfish 数据库。创建 Windows 登录信息时,管理员可以使用 DNS 域名或 NetBIOS 域名提供登录信息。通常,NetBIOS 域是 DNS 域名的子域。例如,如果 DNS 域名为 CORP.EXAMPLE.COM,则 NetBIOS 域可以是 CORP。如果为登录信息提供了 NetBIOS 域名格式,则必须存在与 DNS 域名的映射。

管理 NetBIOS 域名到 DNS 域名的映射

为了管理 NetBIOS 域名和 DNS 域名之间的映射,Babelfish 提供了用于添加、删除和截断映射的系统存储过程。只有具有 sysadmin 角色的用户才能运行这些过程。

要在 NetBIOS 和 DNS 域名之间创建映射,请使用 Babelfish 提供的系统存储过程 babelfish_add_domain_mapping_entry。这两个参数都必须具有有效值而不是 NULL。

EXEC babelfish_add_domain_mapping_entry 'netbios_domain_name', 'fully_qualified_domain_name'

以下示例显示了如何在 NetBIOS 名称 CORP 和 DNS 域名 CORP.EXAMPLE.COM 之间创建映射:

EXEC babelfish_add_domain_mapping_entry 'corp', 'corp.example.com'

要删除现有的映射条目,请使用系统存储过程 babelfish_remove_domain_mapping_entry。

EXEC babelfish_remove_domain_mapping_entry 'netbios_domain_name'

以下示例显示如何删除 NetBIOS 名称 CORP 的映射。

EXEC babelfish_remove_domain_mapping_entry 'corp'

要删除所有现有的映射条目,请使用系统存储过程 babelfish_truncate_domain_mapping_table:

EXEC babelfish_truncate_domain_mapping_table

要查看 NetBIOS 与 DNS 域名之间的所有映射,请使用以下查询。

SELECT netbios_domain_name, fq_domain_name FROM babelfish_domain_mapping;

管理登录信息

创建登录信息

使用具有正确权限的登录信息通过 TDS 端点连接到数据库。如果没有为登录信息创建数据库用户,则该登录将映射到访客用户。如果未启用访客用户,则登录尝试将失败。

使用以下查询创建 Windows 登录信息。FROM WINDOWS 选项允许使用 Active Directory 进行身份验证。

CREATE LOGIN login_name FROM WINDOWS [WITH DEFAULT_DATABASE=database]

以下示例显示了使用原定设置数据库 db1 为 Active Directory 用户 [corp\test1] 创建登录信息。

CREATE LOGIN [corp\test1] FROM WINDOWS WITH DEFAULT_DATABASE=db1

此示例假设 NetBIOS 域 CORP 和 DNS 域名 CORP.EXAMPLE.COM 之间存在映射。如果没有映射,则必须提供 DNS 域名 [CORP.EXAMPLE.COM\test1]。

注意

Active Directory 用户的登录名仅限于少于 21 个字符的名称。

删除登录信息

要删除登录信息,请使用与任何登录信息相同的语法,如以下示例所示:

DROP LOGIN [DNS domain name\login]
更改登录信息

要更改登录信息,请使用与任何登录信息相同的语法,如以下示例所示:

ALTER LOGIN [DNS domain name\login] { ENABLE|DISABLE|WITH DEFAULT_DATABASE=[master] }

ALTER LOGIN 命令对于 Windows 登录信息支持有限的选项,包括以下各项:

  • DISABLE – 禁用登录信息。您不能使用禁用的登录信息进行身份验证。

  • ENABLE - 启用禁用的登录信息。

  • DEFAULT_DATABASE – 更改登录信息的原定设置数据库。

注意

所有密码管理都是通过 AWS Directory Service 执行的,因此 ALTER LOGIN 命令不允许数据库管理员更改或设置 Windows 登录的密码。

使用 Kerberos 身份验证连接到适用于 Aurora PostgreSQL 的 Babelfish

通常,使用 Kerberos 进行身份验证的数据库用户是从客户端计算机进行身份验证的。这些计算机是 Active Directory 域的成员。这些用户使用客户端应用程序中的 Windows 身份验证在 TDS 端口上访问适用于 Aurora PostgreSQL 的 Babelfish 服务器。

使用 Kerberos 身份验证在 PostgreSQL 端口上连接到适用于 Aurora PostgreSQL 的 Babelfish

您可以将从 TDS 端口创建的登录信息与 TDS 端口或 PostgreSQL 端口一起使用。但是,PostgreSQL 原定设置情况下对用户名使用区分大小写的比较。要让 Aurora PostgreSQL 将 Kerberos 用户名解释为不区分大小写,您必须在自定义 Babelfish 集群参数组中将 krb_caseins_users 参数设置为 true。原定设置情况下,此参数设置为 false。有关更多信息,请参阅配置不区分大小写的用户名。此外,必须从 PostgreSQL 客户端应用程序中以 <登录名@DNS 域名> 格式指定登录用户名。您不能使用 <DNS 域名\登录名> 格式。

经常发生的错误

您无法在本地 Microsoft Active Directory 与 AWS Managed Microsoft AD 之间配置林信任关系。有关更多信息,请参阅创建信任关系。然后,您必须使用专门的域特定端点进行连接,而不是在主机端点中使用 Amazon 域 rds.amazonaws.com。如果您没有使用正确的域特定端点,您可能会遇到以下错误:

Error: “Authentication method "NTLMSSP" not supported (Microsoft SQL Server, Error: 514)"

当 TDS 客户端无法缓存所提供的端点 URL 的服务票证时,就会出现此错误。有关更多信息,请参阅使用 Kerberos 进行连接