LDAP Link 问题故障排除

LDAP Link 服务可能会出现各种问题,包括:

  • 用户和角色断开连接(孤立)

  • 对象丢失

  • 用户冲突

用户和角色断开连接(孤立)

如果 LDAP Link 服务出现问题,通过 LDAP Link 同步的 Vertica 用户和角色可能会断开连接或变为孤立状态。例如,当您更改与 LDAP 服务器的连接时,用户和角色会变为孤立状态,如以下场景中所述:

  1. 创建一个 LDAP 连接,如下所示:

    => ALTER DATABASE MyDB1 SET PARAMETER LDAPLinkURL='ldap://ebuser',
    LDAPLinkSearchBase='dc=example,dc=com', LDAPLinkBindDN='mega',
    LDAPLinkBindPswd='$megapassword$';
    => ALTER DATABASE MyDB1 SET PARAMETER LDAPLinkOn = '1';
    
  2. 运行 LDAP Link 会话以同步 LDAP 和 Vertica 用户。

  3. 通过步骤 1 更改一个或多个连接参数。只有更改 LDAPLinkURL 或 LDAPLinkSearchBase 参数之一,才能更改连接。如果新的和旧的 LDAPLinkURL 和 LDAPLinkSearchBase 包含相同的用户集,则用户不会变为孤立状态。

  4. 运行另一个 LDAP Link 会话。系统将尝试重新同步 LDAP 和 Vertica 用户。由于连接已更改,现有 Vertica 用户无法与来自新连接的 LDAP 用户同步。这些 Vertica 用户将变为孤立状态。

作为 dbadmin,您可以通过检查 USERS 系统表中的 is_orphaned_from_ldap 列来识别孤立用户:

 => SELECT is_orphaned_from_ldap FROM users;

字段值 t 表示该用户是孤立用户。孤立的 Vertica 用户无法连接到 LDAP 服务器,也无法使用 LDAP 身份验证登录 Vertica(但是,分配给该用户的其他身份验证方法仍然有效)。在这种情况下,您可以删除孤立的 Vertica 用户并运行 LDAP Link 服务,以重新同步用户。

重定父级的对象

当您从 LDAP 服务器中删除用户或组时,LDAP Link 服务会从 Vertica 中移除相同的用户和角色,但不会删除已删除的用户和角色拥有的对象。要为这些无主对象赋予新的所有者,请使用 GlobalHeirUsername 参数,此参数可将某个用户指定为最初由已删除用户拥有的所有对象的新父级。

例如,要将无主对象的所有权授予 user1(如果该用户不存在,则创建该用户):

=> ALTER DATABASE example_db SET PARAMETER GlobalHeirUsername=user1;

默认情况下,此参数设置为 <auto>,可将对象的父级重定为 dbadmin 用户。

如果 GlobalHeirUsername 为空,则不会将对象的父级重定为其他用户。

有关详细信息,请参阅安全参数

用户冲突

使用 LDAP Link 同步的 Vertica 用户和角色可能会发生冲突。例如,当您在 LDAP 服务器上创建新用户或组,而 Vertica 上存在另一个同名的用户或角色时,就会发生此类冲突。

作为 dbadmin,请使用以下参数之一解决用户冲突:

  • LDAPLinkConflictPolicy

  • LDAPLinkStopIfZeroUsers

LDAPLinkConflictPolicy

LDAPLinkConflictPolicy 用于控制 Vertica 在遇到冲突时的行为方式。对此参数的更改将在下一次同步期间生效。

  • LDAPLinkConflictPolicy=IGNORE 将忽略新增 LDAP 用户并保留现有 Vertica 用户

  • LDAPLinkConflictPolicy=MERGE(默认)将新增 LDAP 用户与 Vertica 用户合并,并将数据库用户转换为 LDAP 用户,同时保留数据库用户的对象。

例如,要设置参数:

=> ALTER DATABASE example_db SET PARAMETER LDAPLinkConflictPolcy='MERGE';

LDAPLinkStopIfZeroUsers

LDAPLinkStopIfZeroUsers 用于控制在同步期间 LDAP 服务器的用户为零时 Vertica 的行为方式。

  • LDAPLinkStopIfZeroUsers=0 表示,在 LDAP 服务器中未找到任何用户且删除了所有 Vertica 用户时,不停止同步。

  • LDAPLinkStopIfZeroUsers=1 表示,在 LDAP 服务器中找不到用户时,停止同步并返回错误。不会删除任何 Vertica 用户。

使用 ldap_link_events 表监控 LDAP Link 同步:

=> SELECT transaction_id, event_type, entry_name, entry_oid FROM ldap_link_events;
   transaction_id |    event_type      | entry_name | entry_oid
------------------+--------------------+------------+-----------
45035996273705317 | SYNC_STARTED       |            |         0
45066962732553589 | SYNC_FINISHED      |            |         0
45066988112255317 | PROCESSING_STARTED |            |         0
23411234566789765 | USER_CREATED       | tuser      | 234548899
(4 rows)