如何将技术用户迁移到LDAP用户?

时间:2017-08-23 14:42:36

标签: ldap sonarqube

我几乎所有用户都设置为本地(技术为SonarQube doc称之为用户)用户并且刚刚安装了&配置LDAP插件2.2以连接到我的Active Directory。

连接正常:如果SonarQube未知但LDAP中存在的用户尝试登录,则会自动创建其用户。

我想将现有的SonarQube用户(未链接到LDAP)转换为LDAP用户,以便他们的密码和组成员资格自动更新,但无法在文档中找到如何执行此操作。

我找到了这个答案how to change a local user to ldap,但它没有用到:当我尝试使用LDAP凭据和相同的登录信息登录时,我得到了一个"身份验证失败。"。

一些背景知识:

  • 在某个时间点(即几年前和SonarQube版本之前),我已经配置了LDAP插件,一切都按预期工作。在更新期间,此配置以某种方式消失,并且LDAP用户全部转换为技术用户(或者我假设)。
  • 我找不到删除用户的方法(正如我在上面链接的SO帖子中所建议的那样),只能停用。语义学,但它可能有一些重要性。
  • 我正在运行SonarQube 5.6.1。

编辑: 我更新到最新的LTS版本5.6.6。 启用跟踪日志: 当我尝试使用已停用的本地用户登录时(希望这会在LDAP中找到它):

TRACE web[sql] time=0ms | sql=SELECT count(`users`.id) AS count_id FROM `users` WHERE (login='tguerin' and user_local=1) 
TRACE web[sql] time=1ms | sql=SELECT * FROM `users` WHERE (login='tguerin' AND active=1)  LIMIT 1
TRACE web[sql] time=0ms | sql=SELECT * FROM `properties` WHERE (((`properties`.`resource_id` IS NULL AND `properties`.`user_id` IS NULL)) AND (`properties`.`prop_key` = 'sonar.allowUsersToSignUp'))  LIMIT 1
DEBUG web[http] POST /sessions/login | time=224ms

日志中没有更多内容:没有调用LDAP

当我尝试使用不存在的用户(既不是本地用户也不是LDAP用户)登录时:

  TRACE web[sql] time=3ms | sql=SELECT count(`users`.id) AS count_id FROM `users` WHERE (login='notLocal' and user_local=1) 
  DEBUG web[o.s.p.l.LdapUsersProvider] Requesting details for user notLocal
  DEBUG web[o.s.p.l.LdapSearch] Search: LdapSearch{baseDn=...), parameters=[notLocal], attributes=[mail, cn]}
  DEBUG web[o.s.p.l.LdapContextFactory] Initializing LDAP context {java.naming.provider.url=ldap://x.x.x.x:389, java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory, java.naming.security.principal=..., com.sun.jndi.ldap.connect.pool=true, java.naming.security.authentication=simple, java.naming.referral=follow}
  DEBUG web[o.s.p.l.LdapUsersProvider] User notLocal not found in <default>
  TRACE web[sql] time=0ms | sql=SELECT * FROM `properties` WHERE (((`properties`.`resource_id` IS NULL AND `properties`.`user_id` IS NULL)) AND (`properties`.`prop_key` = 'sonar.allowUsersToSignUp'))  LIMIT 1
  DEBUG web[http] POST /sessions/login | time=66ms

按预期检查数据库,然后检查LDAP。

Edit2:为了排除我服务器上特定配置/插件的问题,我启动了一个Docker Sonarqube 5.6.6容器,添加了一个本地用户,添加了LDAP插件(重启,LDAP配置确定),停用了用户,尝试登录:相同的行为(即不查询LDAP服务器)

1 个答案:

答案 0 :(得分:0)

由于似乎没有任何效果,我决定检查数据库。

将表格user_local中的字段users0更改为1就可以了。我无法想象这是SonarQube推荐的,但截至目前,我没有发现任何副作用。