問題
ranger整合LDAP時,同步用戶失敗,報錯401
ranger usersync日誌如下
問題分析
由上面的日誌可知,同步進程從ldap中查詢的用戶跟在ldap服務器上用命令查詢的用戶一致。也就是說,ldap數據已經查詢完成。
但是在get user mappings時打印401權限報錯
查看源碼,發現是在LdapPolicyMgrUserGroupBuilder.java類中755行出問題的,如下
登陸6080 ranger界面,發現
沒有rangerusersync用戶。
嘗試手動添加時報錯Logged in user is not allowed to create/update user
得知rangerusersync用戶已經登陸,不能create
既然是mysql的問題,就對mysql中ranger庫進行檢查
查詢跟同步相關的ranger數據庫的表
select * from ranger.x_portal_user;
use ranger;
select * from x_portal_user_role;
發現rangerusersync的user_role爲ROLE_KEY_ADMIN不同於其他的internal用戶
ranger數據庫的schema
查詢上面ranger數據庫的schema發現
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;
後再次同步,同步進程正常
問題解決方案
若再遇到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,若不是,則修改。