【问题标题】:How to migrate a technical user to a LDAP one?如何将技术用户迁移到 LDAP 用户?
【发布时间】:2017-08-23 14:42:36
【问题描述】:

我几乎将所有用户都设置为本地用户(SonarQube 文档称他们为技术用户),并且刚刚安装并配置了 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 服务器)

【问题讨论】:

  • @slartidan 我明确链接到那个帖子,说它不起作用。
  • 查看 SonarQube 日志文件(更改调试级别以最大化日志记录)并在您的问题中发布一些相关部分。你也应该看看5.6.1之后发布的5.6补丁:最新版本是5.6.6
  • @ThierryGuérin 我强烈希望我们在另一篇文章中提供工作解决方案,而不是有两个相同的问题。
  • @slartidan 公平点。我担心的是另一个帖子相当陈旧,OP没有说明提议的解决方案是否对他有用,也没有提出替代方案。如果我在该帖子中添加评论,它可能永远不会获得“已接受的解决方案”状态,在浏览 SE 寻求答案时,这总是受欢迎的。我不是这方面的老手,所以如果每个人都认为它更好,我会把我的帖子移到另一个。

标签: ldap sonarqube


【解决方案1】:

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

将表 users 中的字段 user_local0 更改为 1 成功了。我无法想象 SonarQube 会推荐这个,但到目前为止,我没有发现任何副作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 2021-09-06
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多