通过 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)