

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Babelfish 進行 Kerberos 身分驗證
<a name="babelfish-active-directory"></a>

Babelfish for Aurora PostgreSQL 15.2 版支援使用 Kerberos 的資料庫叢集身分驗證。此方法允許您使用 Microsoft Windows 驗證，在使用者連線至您的 Babelfish 資料庫時進行身分驗證。若要這樣做，您必須先將資料庫叢集設定為 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>

 Babelfish for Aurora PostgreSQL 資料庫叢集可以使用兩個不同的連接埠進行連線，但 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 身分驗證連線至 Babelfish for Aurora PostgreSQL
<a name="babelfish-active-directory-kerberos"></a>

一般而言，使用 Kerberos 進行驗證的資料庫使用者是從其用戶端機器執行這項操作。這些機器是 Active Directory 網域的一部份。他們使用其用戶端應用程式的 Windows 驗證來存取 TDS 連接埠上的 Babelfish for Aurora PostgreSQL 伺服器。

### 使用 Kerberos 身分驗證連線至 PostgreSQL 連接埠上的 Babelfish for Aurora PostgreSQL
<a name="babelfish-active-directory-kerberos-pgport"></a>

 您可以使用以 TDS 或 PostgreSQL 連接埠，從 TDS 連接埠建立的登入。但是根據預設，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)。此外，您必須以 <login@DNS 網域名稱> 格式，從 PostgreSQL 用戶端應用程式指定登入使用者名稱。您不能使用 <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)。