如何重置丢失的Cassandra管理员用户密码?

时间:2013-08-23 09:07:19

标签: cassandra cassandra-2.0

我可以完全访问Cassandra安装文件和cassandra.yaml中配置的PasswordAuthenticator。如何重置已丢失的管理员用户密码,同时保持现有数据库的完整性,我该怎么做?

3 个答案:

答案 0 :(得分:9)

Cassandra 2.1的哈希值发生了变化:

  1. 切换到身份验证器:AllowAllAuthenticator
  2. 重新启动cassandra
  3. UPDATE system_auth.credentials SET salted_hash = '$2a$10$H46haNkcbxlbamyj0OYZr.v4e5L08WTiQ1scrTs9Q3NYy.6B..x4O' WHERE username='cassandra';
  4. 切换回验证码:PasswordAuthenticator
  5. 重新启动cassandra
  6. 以cassandra / cassandra身份登录
  7. 创建用户并更改用户心中的内容。

答案 1 :(得分:7)

通过以下步骤解决:

  1. cassandra.yaml中的身份验证器更改为AllowAllAuthenticator并重新启动Cassandra
  2. cqlsh
  3. update system_auth.credentials set salted_hash='$2a$10$vbfmLdkQdUz3Rmw.fF7Ygu6GuphqHndpJKTvElqAciUJ4SZ3pwquu' where username='cassandra';
  4. 退出cqlsh
  5. 将身份验证器更改回PasswordAuthenticator并重新启动Cassandra
  6. 现在您可以使用

    登录
    cqlsh -u cassandra -p cassandra
    

    并将密码更改为其他内容。

答案 2 :(得分:6)

从cassandra 2.0开始

ALTER USER cassandra WITH PASSWORD 'password';

如果您想添加用户。

// CREATE USER uname WITH PASSWORD 'password'; // add new user
// GRANT all ON ALL KEYSPACES to uname;    // grant permissions to new user

使用LIST USERS;

验证您的现有用户

修改

哦,小伙子,这很有趣!所以,我找到了一种解决方法,但它需要更改源代码。

首先是高级概述:

  1. 编辑源代码,以便您可以对system_auth.credentials列族进行更改
  2. 将身份验证器更改为AllowAllAuthenticator
  3. 启动C *
  4. 使用cqlsh登录,无需密码
  5. 更新cassandra用户的哈希密码
  6. 撤消源更改并更改回PasswordAuthenticator。
  7. 第1步 - 编辑来源

    打开C *源并转到包org.apache.cassandra.service.ClientState; 查找validateLogin()ensureNotAnonymous()函数并对所有包含的内容进行评论,以便最终得到:

    public void validateLogin() throws UnauthorizedException
    {
        // if (user == null)
        //    throw new UnauthorizedException("You have not logged in");
    }
    
    public void ensureNotAnonymous() throws UnauthorizedException
    {
        validateLogin();
        // if (user.isAnonymous())
        //    throw new UnauthorizedException("You have to be logged in and not anonymous to perform this request");
    } 
    

    Step2 - 更改为cassandra.yaml中的AllowAllAuthenticator Step3& 4 - 简单! 第5步 - 从cqlsh:

    执行此insert语句
    insert into system_auth.credentials (username, options, salted_hash) 
    VALUES ('cassandra', null, '$2a$10$vbfmLdkQdUz3Rmw.fF7Ygu6GuphqHndpJKTvElqAciUJ4SZ3pwquu');
    

    注意*步骤5将起作用,假设已经创建了名为“cassandra”的用户。如果您创建了另一个用户,只需切换您要插入的用户名(此过程会重置密码,但不会添加新用户)。

    第6步通过取消注释validateLogin()ensureNotAnonymous()来修复源代码并切换回cassandra.yaml中的PasswordAuthenticator,您现在应该可以通过./cqlsh访问cqlsh了。 -u cassandra -p cassandra