

# 使用 Active Directory 安全组为 Babelfish 设置 Kerberos 身份验证
<a name="babelfish-kerberos-securityad"></a>

从 Babelfish 版本 4.2.0 开始，可以使用 Active Directory 安全组为 Babelfish 设置 Kerberos 身份验证。以下是使用 Active Directory 设置 Kerberos 身份验证需要完成的先决条件：
+  必须按照[适用于 Babelfish 的 Kerberos 身份验证](babelfish-active-directory.md)中提到的所有步骤进行操作。
+ 确保数据库实例与 Active Directory 关联。为验证这一点，您可以在控制台中或者通过运行 [https://docs.amazonaws.cn/cli/latest/reference/rds/describe-db-instances.html](https://docs.amazonaws.cn/cli/latest/reference/rds/describe-db-instances.html) Amazon CLI 命令来查看域成员资格的状态。

  数据库实例的状态应为已启用 kerberos。有关了解域成员资格的更多信息，请参阅[了解域成员资格](postgresql-kerberos-managing.md#postgresql-kerberos-managing.understanding)。
+ 使用以下查询验证 NetBIOS 域名和 DNS 域名之间的映射：

  ```
  SELECT netbios_domain_name, fq_domain_name FROM babelfish_domain_mapping;
  ```
+ 在继续操作之前，请验证使用单独登录名进行的 Kerberos 身份验证是否符合预期。使用以 Active Directory 用户身份进行 Kerberos 身份验证的连接应该会取得成功。如果您遇到任何问题，请参阅[经常发生的错误](babelfish-active-directory.md#babelfish-active-directory-errors)。

## 设置 pg\_ad\_mapping 扩展
<a name="babelfish-kerberos-securityad-setpgextn"></a>

 必须按照[设置 pg\_ad\_mapping 扩展](AD.Security.Groups.md#AD.Security.Groups.Setup)中提到的所有步骤进行操作。要验证扩展是否已安装，请从 TDS 端点运行以下查询：

```
1> SELECT extname, extversion FROM pg_extension where extname like 'pg_ad_mapping';
2> GO
extname       extversion
------------- ----------
pg_ad_mapping 0.1

(1 rows affected)
```

## 管理组登录名
<a name="babelfish-kerberos-securityad-managing"></a>

 按照[管理登录信息](babelfish-active-directory.md#babelfish-active-directory-login-managing)中提到的步骤创建组登录名。我们建议登录名与 Active Directory（AD）安全组名称相同以便于维护，但这不是强制性要求。例如：

```
CREATE LOGIN [corp\accounts-group] FROM WINDOWS [WITH DEFAULT_DATABASE=database]
```

## 审计和日志记录
<a name="babelfish-kerberos-securityad-audit"></a>

 要确定 AD 安全主体身份，请使用以下命令：

```
1> select suser_name();
2> GO
suser_name
----------
corp\user1

(1 rows affected)
```

目前，AD 用户身份在日志中不可见。可以开启 `log_connections` 参数来记录数据库会话建立情况。有关更多信息，请参阅 [log\_connections](https://docs.amazonaws.cn/prescriptive-guidance/latest/tuning-postgresql-parameters/log-connections.html)。输出包括作为主体的 AD 用户身份，如以下示例所示。然后，与此输出关联的后端 PID 有助于将操作归因回实际 AD 用户。

```
bbf_group_ad_login@babelfish_db:[615]:LOG: connection authorized: user=bbf_group_ad_login database=babelfish_db application_name=sqlcmd GSS (authenticated=yes, encrypted=yes, principal=user1@CORP.EXAMPLE.COM)
```