当Cassandra不知道&cassandra'默认用户?

时间:2014-08-14 11:19:07

标签: authentication cassandra

如何在不更改源代码的情况下重置默认的Cassandra凭据?

我检查过像How to reset a lost Cassandra admin user's password?这样的类似问题。  我有三个Datastax Cassandra 2.0.8节点集群,我正在尝试实现身份验证。我在所有节点中设置了cassandra.yaml并重新启动它们。问题是我仍然无法登录到cqlsh。

我还尝试在cqlsh中为cassandra用户重置密码(我已禁用身份验证):

update system_auth.credentials set salted_hash='$2a$10$vbfmLdkQdUz3Rmw.fF7Ygu6GuphqHndpJKTvElqAciUJ4SZ3pwquu' where username='cassandra';

在日志中有关于创建cassandra超级用户的信息。我检查了密钥空间system_auth,它包括凭据,权限和用户。凭证列系列确实包含用户cassandra:

cqlsh> use system_auth;
cqlsh:system_auth> select * from credentials;

 username  | options | salted_hash
-----------+---------+----------------------------------------------------------                                ----
 cassandra |    null | $2a$10$vbfmLdkQdUz3Rmw.fF7Ygu6GuphqHndpJKTvElqAciUJ4SZ3pw                                quu

(1 rows)

但是,当我尝试时:

./cqlsh -u cassandra -p cassandra

我得到例外,该用户不存在,但我没有权限创建一个。

cql.cassandra.ttypes.AuthenticationException: AuthenticationException(why="User cassandra doesn't exist - create it with CREATE USER query first")

1 个答案:

答案 0 :(得分:6)

我不确定,但您上面使用的哈希很可能会随着每个版本而变化,并且可能特定于Cassandra的特定版本。考虑到这一点,您可以(在理论上)在VM中安装相同的版本,然后查询该机器的system_auth.credentials以获取cassandra用户的salted_hash。如果不是你上面提到的那个问题,我就不会想到这样做。

否则,下一个选项工作。

  1. 停止你的Cassandra集群。
  2. 在每个节点上cd向下到data目录,然后执行:

    $ mv system_auth system_auth_20140814

  3. 重新启动每个节点。

  4. 只要验证器仍然设置(在你的cassandra.yaml中)使用PasswordAuthenticator,Cassandra将使用默认的Cassandra超级用户重建system_auth键空间,你可以使用它cqlsh重新加入。

    $ ./cqlsh -u cassandra -p cassandra
    Connected to MyCluster at 127.0.0.1:9042.
    [cqlsh 5.0.1 | Cassandra 2.1.0-rc5-SNAPSHOT | CQL spec 3.2.0 | Native protocol v3]
    Use HELP for help.
    cqlsh>
    

    注意:

    • 您必须重新添加所有用户,然后重新申请所有用户。
    • 您可以删除mv目录,而不是重命名(system_authrm目录。
    • 您必须将适当的复制设置重新应用到system_auth键空间。默认情况下,system_auth只有一个复制因子。