通过 PostgreSQL 端口上的 PostgreSQL 端点连接到 Babelfish - Amazon Aurora
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

通过 PostgreSQL 端口上的 PostgreSQL 端点连接到 Babelfish

也可以利用从 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 数据库集群配置为使用不区分大小写的用户名

当 AD 用户属于多个组时,T-SQL 和 PostgreSQL 端点之间的行为差异

考虑 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)