Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Authentication 当Cassandra不知道';卡桑德拉';默认用户?_Authentication_Cassandra - Fatal编程技术网

Authentication 当Cassandra不知道';卡桑德拉';默认用户?

Authentication 当Cassandra不知道';卡桑德拉';默认用户?,authentication,cassandra,Authentication,Cassandra,如何在不更改源代码的情况下重置默认Cassandra凭据 我检查过类似的问题,比如。 我有三个节点的Datastax Cassandra 2.0.8集群,我正在尝试实现身份验证。我已经在所有节点中设置了cassandra.yaml并重新启动了它们。问题是我仍然无法登录到cqlsh 我还尝试在cqlsh中重置cassandra用户的密码(我已为此禁用身份验证): 在日志中有关于创建cassandra superuser的信息。我已经检查了keyspace system_auth,它包括凭据、权限和

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

我检查过类似的问题,比如。 我有三个节点的Datastax Cassandra 2.0.8集群,我正在尝试实现身份验证。我已经在所有节点中设置了cassandra.yaml并重新启动了它们。问题是我仍然无法登录到cqlsh

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

在日志中有关于创建cassandra superuser的信息。我已经检查了keyspace 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")

我不确定,但您上面使用的哈希很有可能随着每个版本的变化而变化,并且可能是特定于特定版本的Cassandra。考虑到这一点,您可以(理论上)在虚拟机中安装相同的版本,然后查询该机器的
系统身份验证凭据
,以获取cassandra用户的
salted\u hash
。如果不是因为你上面提到的问题,我决不会想到去尝试

否则,下一个选项将起作用

  • 停止你的卡桑德拉集群
  • 在每个节点上,
    cd
    向下移动到
    data
    目录,然后执行:

    $mv system\u auth system\u auth\u 20140814

  • 重新启动每个节点

  • 只要验证器(在您的cassandra.yaml中)仍然设置为使用
    密码验证器
    ,cassandra将使用默认的cassandra超级用户重新生成
    系统_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\u auth
      目录外,您还可以删除它(
      rm
    • 您必须将适当的复制设置重新应用到
      system\u auth
      keyspace。默认情况下,
      system\u auth
      的复制系数仅为1

    在尝试了您的答案并设置了更高的复制因子后,它成功了。@LadyWoodi太棒了!很高兴我能提供帮助。@LadyWoodi在使用新创建的超级用户进行身份验证之前,您是如何设置更高的复制因子的?或者您是在重新启动后执行此操作的,仅使用LocalStrategy复制系统_auth吗?我有一个由几台机器组成的集群,我正在与同样的错误作斗争。不幸的是,在清理system_auth目录后,没有一台计算机希望启动。@Scooletz我已禁用身份验证,启动节点并更新了复制因子,如下所示:创建键空间system_auth WITH replication={'class':'SimpleStrategy','replication_factor':3};然后我再次启用了身份验证,并使用了上面的解决方案。但是,在清理系统_auth之后,我在启动节点方面没有任何问题。在节点启动期间,您在日志中看到了什么有用的东西吗?应该有关于cassandra超级用户创建的信息。你清理了所有节点上的系统认证了吗?@LadyWoodi我终于解决了这个问题。这个问题是由于没有清理所有的数据目录造成的(我在板上有JBOD)。清洗完所有这些后,上述解决方案发挥了巨大的作用。谢谢你的澄清!
    $ ./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>