

# 通过 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 数据库集群配置为使用不区分大小写的用户名](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 是两个 AD 安全组 [corp\\accounts-group] 和 [corp\\sales-group] 的一部分，数据库管理员已按以下方式设置了用户映射。

```
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 登录名继承权限。如果为两个 T-SQL 组登录名分配的权重相同，则 AD 用户将继承与最新添加的映射相对应的 T-SQL 登录名的权限。对于 PostgreSQL，建议指定权重，以反映各个数据库角色的相对权限/特权来避免模糊不清。在下面的示例中，user1 通过 PSQL 端点进行了连接，并且仅继承了 sales-groups 权限。

```
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)
```