SonarQube升级至7.1版本后LDAP认证失效问题咨询
问题分析与解决方案
首先明确:这不是SonarQube 7.1的BUG,而是升级后新的用户认证校验逻辑,触发了你数据库中原本存在的隐藏问题。
从你提供的报错日志里,关键信息是这句:
org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2
它指向UserDao.selectByEmail方法——也就是说,SonarQube在通过LDAP认证同步用户时,查询数据库发现有两个用户的邮箱地址完全相同,而7.1版本的认证逻辑要求邮箱必须唯一,所以抛出了这个异常,导致认证失败。
为什么7.0版本没问题?因为SonarQube 7.1在用户身份同步的逻辑上做了强化,新增了邮箱唯一性的校验步骤,而7.0及更早版本没有这个严格的检查,所以重复数据的问题被隐藏了。
解决步骤:
- 连接到SonarQube的数据库,执行查询语句找出重复邮箱的用户:
SELECT email, COUNT(*) FROM users GROUP BY email HAVING COUNT(*) > 1; - 处理重复数据:
- 如果你确定其中一个是冗余用户,可以直接删除(注意:删除前要确认该用户没有关联重要的项目权限、历史记录等,避免影响业务);
- 或者修改其中一个用户的邮箱地址,确保每个用户的邮箱唯一。
- 重启SonarQube服务,之后再测试LDAP认证功能,应该就能正常工作了。
额外提示:
后续升级SonarQube前,建议先检查数据库中的用户数据完整性,避免这类隐藏的重复数据问题触发新版本的校验逻辑。
内容的提问来源于stack exchange,提问作者Воффка Сергеевич
相关产品推荐
相关产品推荐

