

# PostgreSQL ポートの PostgreSQL エンドポイント経由で Babelfish に接続する
<a name="babelfish-kerberos-securityad-connect-pgendpoint"></a>

TDS ポートで作成されたグループログインを利用して、PostgreSQL ポート経由で接続することもできます。PostgreSQL ポート経由で接続するには、PostgreSQL クライアントアプリケーションから `<ad_username@FQDN>` 形式で AD ユーザー名を指定する必要があります。`<DNS domain name\ad_username>` 形式は使用できません。

PostgreSQL は、デフォルトでユーザー名の大文字と小文字を区別して比較します。Aurora PostgreSQL で大文字と小文字を区別せずに Kerberos ユーザー名を解釈するには、カスタム Babelfish クラスターパラメータグループで krb\_caseins\_users パラメータを true に設定する必要があります。このパラメータはデフォルトで false に設定されています。詳細については、「[Aurora PostgreSQL DB クラスターの大文字と小文字を区別しないユーザー名を設定する](postgresql-kerberos-setting-up.md#postgresql-kerberos-setting-up.create-logins.set-case-insentive)」を参照してください。

## AD ユーザーが複数のグループに属する場合の T-SQL エンドポイントと PostgreSQL エンドポイントの動作の違い
<a name="babelfish-kerberos-securityad-diff-tsql-pg"></a>

AD ユーザー user1 は、[corp\\accounts-group] と [corp\\sales-group] の 2 つの AD セキュリティグループの一部であり、DB 管理者がユーザーマッピングを次のように設定しているとします。

```
postgres=> select * from pgadmap_read_mapping();
            
ad_sid       | pg_role                         | weight | ad_grp 
-------------+---------------------------------+--------+---------------
S-1-5-67-980 | accounts-group@CORP.EXAMPLE.COM | 7      | accounts-group
S-1-2-34-560 | sales-group@CORP.EXAMPLE.COM    | 10     | sales-group
(2 rows)
```

ユーザーが T-SQL エンドポイントから接続している場合、認可中に、関連付けられたすべての T-SQL ログインから権限を継承します。この例では、user1 は T-SQL グループのログインから権限の統合を継承し、重みは無視されます。これは標準の T-SQL 動作と一致しています。

ただし、同じユーザーが PostgreSQL エンドポイントから接続する場合、関連付けられた T-SQL ログインのうち、重みが最も高いものからのみ権限を継承できます。2 つの T-SQL グループログインに同じ重みが割り当てられた場合、AD ユーザーは、最後に追加されたマッピングに対応する T-SQL ログインの権限を継承します。あいまいさを避けるために、個々の DB ロールの相対的なアクセス許可/権限を反映する重みを指定することをお勧めします。次の例では、user1 は PSQL エンドポイントを介して接続され、セールスグループ権限のみを継承しています。

```
babelfish_db=> select session_user, current_user;

   session_user               |   current_user
------------------------------+---------------------------
 sales-group@CORP.EXAMPLE.COM | sales-group@CORP.EXAMPLE.COM
(1 row)


babelfish_db=> select principal, gss_authenticated from pg_stat_gssapi where pid = pg_backend_pid();

     principal          | gss_authenticated
------------------------+-------------------
 user1@CORP.EXAMPLE.COM | t
(1 row)
```