Fallthrough 身份验证

通常情况下,如果用户使用所选的第一个身份验证记录验证失败,该用户将被拒绝。但是,可以指定某些身份验证方法在失败时“贯穿”到优先级较低的身份验证记录。当使用多个 LDAP 搜索属性时,这可能很有用。

对于新记录,默认情况下禁用身份验证 fallthrough。

身份验证方法兼容性

下表显示了每种身份验证方法与 fallthrough 身份验证的兼容性。值“yes”表示列中的方法可以贯穿并验证其贯穿到的行方法。值“no”表示您无法贯穿到该方法,且身份验证将结束。

值“-”(破折号)表示虽然可以贯穿,但其没有实际意义。例如,一个 hash 身份验证记录可以贯穿到另一个 hash 身份验证记录,但身份验证始终会失败,因为您无法贯穿到正确的密码:

例如,假设将以下启用了 fallthrough 的身份验证记录授予用户 Bob

=> CREATE AUTHENTICATION v_tls_auth METHOD 'tls' HOST TLS '0.0.0.0/0' FALLTHROUGH;

此外,Bob 具有 public 角色,因此具有默认身份验证记录

=> SELECT auth_name,is_auth_enabled,auth_host_type,auth_method,auth_priority,is_fallthrough_enabled FROM client_auth;
         auth_name         | is_auth_enabled | auth_host_type | auth_method | auth_priority | is_fallthrough_enabled
---------------------------+-----------------+----------------+-------------+---------------+------------------------
 default_hash_network_ipv4 | True            | HOST           | PASSWORD    |            -1 | False
 default_hash_network_ipv6 | True            | HOST           | PASSWORD    |            -1 | False
 default_hash_local        | True            | LOCAL          | PASSWORD    |            -1 | False
(3 rows)

如果从远程地址发起连接的 Bob 使用 v_tls_auth 验证失败,Vertica 会尝试使用下一个(按优先级顺序)身份验证记录 default_hash_network_ipv4 对其进行身份验证。

记录身份验证失败

只有当所有授予的身份验证记录都失败,导致用户被拒绝时,才会记录登录失败。只会记录最后一个失败。

例如,假设一个用户被授予 tlspassword 两个身份验证记录,并且 tls 记录可以贯穿到 password 记录。

如果用户使用 tls 记录和 password 记录均验证失败,则只会在 LOGIN_FAILURES 中记录 password 失败。

但是,如果用户使用 tls 记录验证失败,但使用 password 记录验证成功,则不会在 LOGIN_FAILURES 中记录失败。因为用户在记录链的末尾没有被拒绝。

示例

要在新的身份验证记录上启用 fallthrough,请使用 CREATE AUTHENTICATION

=> CREATE AUTHENTICATION v_tls_auth METHOD 'tls' HOST TLS '0.0.0.0/0' FALLTHROUGH;

要在现有身份验证记录上切换 fallthrough,请使用 ALTER AUTHENTICATION

=> ALTER AUTHENTICATION v_tls_auth NO FALLTHROUGH; -- disable
=> ALTER AUTHENTICATION v_tls_auth FALLTHROUGH; -- enable