【问题标题】:How to recover admin password for SonarQube如何恢复 SonarQube 的管理员密码
【发布时间】:2013-08-15 01:36:23
【问题描述】:

我忘记了 SonarQube 的管理员密码。谷歌搜索,发现crypted_password 的值应该更新为8b1254c1c684c5dc904f3f174cea1cacbde4ad84,这会将密码重置为admin。但我仍然无法登录。有什么建议吗?

【问题讨论】:

    标签: sonarqube


    【解决方案1】:

    只是对此的更新,新链接在这里: http://docs.sonarqube.org/display/SONAR/Authentication

    正如链接上所说,您可以这样做:

    如果您丢失了 SonarQube 实例的管理员密码,您可以通过执行以下查询来重置它:

    update users 
    set crypted_password = '88c991e39bb88b94178123a849606905ebf440f5', salt= '6522f3c5007ae910ad690bb1bdbf264a34884c6d' 
    where login = 'admin'
    

    这会将密码重置为管理员。

    【讨论】:

    • 我按照这两分钟的说明设置了一个本地实例:docs.sonarqube.org/display/SONAR/Get+Started+in+Two+Minutes。启用 LDAP 后,我无法再使用 admin/admin 登录,并且我没有任何管理员用户。我认为它使用的是“H2 嵌入式数据库服务器”。如何连接到该数据库以运行查询?
    • 你知道如何连接数据库了吗?同样的问题
    • 不要使用最新版本。查看@david-racodon-qa-consultant 的回答
    • 如果他们安装了早期版本怎么办?他们在哪里可以找到相关信息?
    【解决方案2】:

    您需要连接到声纳数据库并从那里更改管理员密码。 对于 postgresql:

    psql -h mysonar.dc9wocad9da.us-west-1.rds.amazonaws.com -p 5432 -U sonaruser sonardb
    

    然后运行查询:

    update users set crypted_password = '88c991e39bb88b94178123a849606905ebf440f5', salt='6522f3c5007ae910ad690bb1bdbf264a34884c6d' where login = 'admin';
    

    您的新管理员通行证是:

    user: admin
    pass admin
    

    登录后不要忘记更改管理员密码。

    来源:https://docs.sonarqube.org/display/SONAR/Authentication

    【讨论】:

    • 不要使用最新版本。查看@david-racodon-qa-consultant 的回答
    【解决方案3】:

    我不确定你从哪里得到的信息。 这是official documentation to reset the password 和recreate an admin user

    【讨论】:

    • 是的,根据官方文档,这是需要运行的命令:update users set crypted_password = '$2a$12$uCkkXmhW5ThVK8mpBvnXOOJRLd64LJeHTeCkSuB3lfaR2N0AYBaSi', salt=null, hash_method='BCRYPT' where login = 'admin'
    • 如果他们不考虑其中的一部分并编写另一部分,那么该信息将很有用。如果我可以访问系统,我就不需要重置管理员密码,对吗?而且我找不到关于如何、在哪里运行他们给我的查询的完整详细信息?我可以在我的 AWS redis 节点或数字海洋 MySQL 数据库上运行它吗?
    • 主答案中的 cmets 指向此答案,因为原始答案已过时。这个答案现在也有过期/损坏的链接,这是一个更新的链接:docs.sonarqube.org/latest/instance-administration/security 并查找“恢复管理员访问权限”
    【解决方案4】:

    我想分享我如何恢复托管在 AWS EC2 上的 Bitnami SonarQube 的管理员用户密码,但我认为它对任何其他情况同样有效。

    就我而言,我没有管理员密码,也没有数据库密码。以下是我重置管理员密码所采取的步骤列表。

    1. SSH 到 EC2 实例
    2. 找到sonar.properties 文件。就我而言,它位于/opt/bitnami/apps/sonarqube/sonarqube/conf/
    3. 在DATABASE 部分,我发现属性sonar.jdbc.username 和sonar.jdbc.password 在我的例子中是纯文本形式的mysql 凭据。
    4. 使用凭据连接到 mysql
    mysql -uSONARQUBE_USER -p -D bitnami_sonarqube
    
    1. 在documentation page 部分Reinstating Admin Access 中,您会发现查询允许您从数据库级别将管理员用户密码重置为默认密码,即简单的admin。
    update users set crypted_password = '$2a$12$uCkkXmhW5ThVK8mpBvnXOOJRLd64LJeHTeCkSuB3lfaR2N0AYBaSi', salt=null, hash_method='BCRYPT' where login = 'admin'
    
    1. 在浏览器中转到 SonarQube 并尝试使用凭据登录 admin/admin
    2. 登录成功后不要忘记修改密码。

    【讨论】:

    • 如果您使用的是 Sonarqube 7.9.x,那么这些步骤就像魅力一样。我试过了,我可以重设密码。
    • 我在另一台机器上的 sql server 上运行此查询,但它不起作用
    • 与 postgres 和 8.9.1-community image 一起使用
    【解决方案5】:

    当您丢失管理员用户密码时,密码重置与 postgres DB 用户表更新一起工作正常。您可以使用以下加密值和盐为声纳数据库中的任何用户重置密码。

    登录 Sonar DB:

    psql -U sonar_user -W
    sonar_db=# select * from users;
    

    勾选表登录栏,选择要重置密码的用户。如果您没有声纳管理控制台访问权限。

    update users set crypted_password = '88c991e39bb88b94178123a849606905ebf440f5', salt='6522f3c5007ae910ad690bb1bdbf264a34884c6d' where login = 'sonara_user_name';
    

    然后密码将是管理员。 登录系统后,请务必将密码重置为您自己的密码。

    【讨论】:

      【解决方案6】:

      官方文档: https://docs.sonarqube.org/latest/instance-administration/security/#header-3

      update users set crypted_password='100000$t2h8AtNs1AlCHuLobDjHQTn9XppwTIx88UjqUm4s8RsfTuXQHSd/fpFexAnewwPsO6jGFQUv/24DnO55hY6Xew==', salt='k9x9eN127/3e/hf38iNiKwVfaVk=', hash_method='PBKDF2', reset_password='true', user_local='true' where login='admin';
      

      【讨论】:

        【解决方案7】:

        How to generate sonarqube password hash ?

        private static final class Sha1Function implements HashFunction {
        @Override
        public AuthenticationResult checkCredentials(UserDto user, String password) {
          if (user.getCryptedPassword() == null) {
            return new AuthenticationResult(false, "null password in DB");
          }
          if (user.getSalt() == null) {
            return new AuthenticationResult(false, "null salt");
          }
          if (!user.getCryptedPassword().equals(hash(user.getSalt(), password))) {
            return new AuthenticationResult(false, "wrong password");
          }
          return new AuthenticationResult(true, "");
        }
        
        private static String hash(String salt, String password) {
          return DigestUtils.sha1Hex("--" + salt + "--" + password + "--");
        }
        

        #!/usr/bin/env python3
        # -*- coding: utf-8 -*-
        
        import hashlib
        
        
        def hash(salt, password):
            """calc sonar crypted_password
            """
        
            return hashlib.new(
                'sha1',
                bytes(f"--{salt}--{password}--", 'utf-8')
            ).hexdigest()
        
        
        
        if __name__ == '__main__':
            # admin: admin
        
            password = 'admin'
            salt = '6522f3c5007ae910ad690bb1bdbf264a34884c6d'
            crypted_password = '88c991e39bb88b94178123a849606905ebf440f5'
        
            if crypted_password == hash(salt, password):
                print(f"{password} -> sonarqube hash algorithm-> {crypted_password}")
        

        【讨论】:

          【解决方案8】:

          如果您在 Docker 中运行 Sonarqube,并且您已经挂载了一个用于数据持久性的卷,那么您可以删除 e7 文件夹和 sonar.mv.db启动容器之前的数据库文件。

          这会将您的 Sonarqube 实例重置为全新安装。

          一个正在运行Community Edition v8.9的docker容器示例

          docker container run -e SONARQUBE_HOME=/opt/sonarqube/data -e SQ_DATA_DIR=/opt/sonarqube/data -e PWD=/opt/sonarqube/data -v c:/src/data/sonarqube/:/opt/sonarqube/data -dp 9000:9000 --name sonarqube sonarqube:8.9-community
          

          其中 c:/src/data/sonarqube/ 是本地文件夹(绑定到容器 /opt/sonarqube/data),其中将包含 e7 文件夹和sonar.mv.db 可以删除的文件。

          注意:按照这些说明,您将丢失所有项目和令牌,但您将获得对全新安装的 Sonarqube 的管理员访问权限。

          【讨论】:

            【解决方案9】:

            official documentation when writing this answer 目前声明:

            恢复管理员访问权限

            如果您更改了管理员密码,然后又丢失了,您可以使用以下查询重置它:

            update users set crypted_password='100000$t2h8AtNs1AlCHuLobDjHQTn9XppwTIx88UjqUm4s8RsfTuXQHSd/fpFexAnewwPsO6jGFQUv/24DnO55hY6Xew==', salt='k9x9eN127/3e/hf38iNiKwVfaVk=', hash_method='PBKDF2', reset_password='true', user_local='true' where login='admin';
            

            如果您删除了 admin 并随后锁定了具有全局管理权限的其他用户,则需要使用以下查询重新授予用户 admin:

            INSERT INTO user_roles(uuid, user_uuid, role) 
            VALUES ('random-uuid',
            (select uuid from users where login='mylogin'), 
            'admin');
            

            它在我的 sonarqube 实例版本 8.9.7 上就像一个魅力

            另外,如果您使用的是 kubernetes,您可以使用以下命令轻松启动 psql 容器:

            kubectl run --restart=Never --image=governmentpaas/psql --command=true psql -- sleep infinity
            kubectl exec -it psql -- sh
            

            然后使用以下命令连接数据库

            psql -h yourhostname --user sonarqubeuser -d sonarqubedb
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-12-21
              • 1970-01-01
              • 2015-02-17
              • 2016-09-04
              • 1970-01-01
              • 2021-09-09
              相关资源
              最近更新 更多