

# 适用于 Babelfish 的 Kerberos 身份验证
<a name="babelfish-active-directory"></a>

适用于 Aurora PostgreSQL 的 Babelfish 15.2 版本支持使用 Kerberos 对数据库集群进行身份验证。当用户连接到 Babelfish 数据库时，这种方法可让您使用 Microsoft Windows 身份验证来验证用户身份。为此，您必须先将数据库集群配置为使用 AWS Directory Service for Microsoft Active Directory 进行 Kerberos 身份验证。有关更多信息，请参阅《AWS Directory Service 管理员指南》**中的[什么是 Directory Service？](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/what_is.html)。

## 设置 Kerberos 身份验证
<a name="babelfish-active-directory-setup"></a>

 适用于 Aurora PostgreSQL 的 Babelfish 数据库集群可以使用两个不同的端口进行连接，但 Kerberos 身份验证设置是一个一次性过程。因此，您必须先为数据库集群设置 Kerberos 身份验证。有关更多信息，请参阅[设置 Kerberos 身份验证](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/postgresql-kerberos-setting-up.html)。完成设置后，确保您可以使用 Kerberos 连接到 PostgreSQL 客户端。有关更多信息，请参阅[使用 Kerberos 身份验证进行连接](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/postgresql-kerberos-connecting.html)。

## Babelfish 中的登录信息和用户预调配
<a name="babelfish-active-directory-login"></a>

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

### 管理 NetBIOS 域名到 DNS 域名的映射
<a name="babelfish-active-directory-login-netbios"></a>

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

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

**Example**  

```
EXEC babelfish_add_domain_mapping_entry 'netbios_domain_name', 'fully_qualified_domain_name'
```

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

**Example**  

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

要删除现有的映射条目，请使用系统存储过程 babelfish\$1remove\$1domain\$1mapping\$1entry。

**Example**  

```
EXEC babelfish_remove_domain_mapping_entry 'netbios_domain_name'
```

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

**Example**  

```
EXEC babelfish_remove_domain_mapping_entry 'corp'
```

要删除所有现有的映射条目，请使用系统存储过程 babelfish\$1truncate\$1domain\$1mapping\$1table：

**Example**  

```
EXEC babelfish_truncate_domain_mapping_table
```

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

**Example**  

```
SELECT netbios_domain_name, fq_domain_name FROM babelfish_domain_mapping;
```

### 管理登录信息
<a name="babelfish-active-directory-login-managing"></a>

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

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

```
CREATE LOGIN login_name FROM WINDOWS [WITH DEFAULT_DATABASE=database]
```

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

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

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

**注意**  
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\$1DATABASE – 更改登录信息的原定设置数据库。

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

### 使用 Kerberos 身份验证连接到适用于 Aurora PostgreSQL 的 Babelfish
<a name="babelfish-active-directory-kerberos"></a>

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

### 使用 Kerberos 身份验证在 PostgreSQL 端口上连接到适用于 Aurora PostgreSQL 的 Babelfish
<a name="babelfish-active-directory-kerberos-pgport"></a>

 您可以将从 TDS 端口创建的登录信息与 TDS 端口或 PostgreSQL 端口一起使用。但是，PostgreSQL 原定设置情况下对用户名使用区分大小写的比较。要让 Aurora PostgreSQL 将 Kerberos 用户名解释为不区分大小写，您必须在自定义 Babelfish 集群参数组中将 `krb_caseins_users` 参数设置为 `true`。原定设置情况下，此参数设置为 `false`。有关更多信息，请参阅[配置不区分大小写的用户名](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/postgresql-kerberos-setting-up.html#postgresql-kerberos-setting-up.create-logins.set-case-insentive)。此外，必须从 PostgreSQL 客户端应用程序中以 <登录名@DNS 域名> 格式指定登录用户名。您不能使用 <DNS 域名\$1登录名> 格式。

### 经常发生的错误
<a name="babelfish-active-directory-errors"></a>

您无法在本地 Microsoft Active Directory 与 AWS Managed Microsoft AD 之间配置林信任关系。有关更多信息，请参阅[创建信任关系](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/postgresql-kerberos-setting-up.html#postgresql-kerberos-setting-up.create-trust)。然后，您必须使用专门的域特定端点进行连接，而不是在主机端点中使用 Amazon 域 `rds.amazonaws.com`。如果您没有使用正确的域特定端点，您可能会遇到以下错误：

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

 当 TDS 客户端无法缓存所提供的端点 URL 的服务票证时，就会出现此错误。有关更多信息，请参阅[使用 Kerberos 进行连接](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/postgresql-kerberos-connecting.html)。