Ranger同步LDAP用户报错401

时间:2024-04-09 18:13:28

问题

ranger整合LDAP时,同步用户失败,报错401
ranger usersync日志如下
Ranger同步LDAP用户报错401

问题分析

由上面的日志可知,同步进程从ldap中查询的用户跟在ldap服务器上用命令查询的用户一致。也就是说,ldap数据已经查询完成。
但是在get user mappings时打印401权限报错
查看源码,发现是在LdapPolicyMgrUserGroupBuilder.java类中755行出问题的,如下
Ranger同步LDAP用户报错401
登陆6080 ranger界面,发现
Ranger同步LDAP用户报错401
没有rangerusersync用户。
尝试手动添加时报错Logged in user is not allowed to create/update user
得知rangerusersync用户已经登陆,不能create

既然是mysql的问题,就对mysql中ranger库进行检查
查询跟同步相关的ranger数据库的表
select * from ranger.x_portal_user;
Ranger同步LDAP用户报错401
Ranger同步LDAP用户报错401
use ranger;
select * from x_portal_user_role;
Ranger同步LDAP用户报错401

发现rangerusersync的user_role为ROLE_KEY_ADMIN不同于其他的internal用户
ranger数据库的schema

查询上面ranger数据库的schema发现
Ranger同步LDAP用户报错401
x_portal_user_role,This table contains role details of users. An user roles may be ‘ROLE_SYS_ADMIN’ or ‘ROLE_USER’. user_id of this table is a foreign key of x_portal_user(ID)
ROLE_KEY_ADMIN这种情况产生原因暂不清楚

尝试update x_portal_user_role set user_role=‘ROLE_SYS_ADMIN’ where user_id=3;
后再次同步,同步进程正常
Ranger同步LDAP用户报错401
Ranger同步LDAP用户报错401

问题解决方案

若再遇到usersync日志401报错,
可登陆ranger数据库
select user_role from ranger.x_portal_user_role
where user_id=(select id from ranger.x_user where user_name=”rangerusersync”);

查看x_portal_user_role表中rangerusersync用户的user_role是否为ROLE_SYS_ADMIN,若不是,则修改。