14

我对 Cassandra 安装文件和在cassandra.yaml. 我该怎么做才能重置丢失的管理员用户密码,同时保持现有数据库完好无损?

4

3 回答 3

10

Cassandra 2.1 的哈希值已更改:

  1. 切换到验证器:AllowAllAuthenticator
  2. 重启卡桑德拉
  3. UPDATE system_auth.credentials SET salted_hash = '$2a$10$H46haNkcbxlbamyj0OYZr.v4e5L08WTiQ1scrTs9Q3NYy.6B..x4O' WHERE username='cassandra';
  4. 切换回验证器:PasswordAuthenticator
  5. 重启卡桑德拉
  6. 以 cassandra/cassandra 身份登录
  7. 随心所欲地创建用户和更改用户。
于 2015-01-06T09:11:38.217 回答
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

现在您可以使用

cqlsh -u cassandra -p cassandra

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

于 2013-12-02T17:13:46.530 回答
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;

编辑

哦,男孩,这会很有趣!因此,我找到了一种 hacktastic 方式,但它需要更改源代码。

首先是高级概述:

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

第 1 步- 编辑源

打开 C* 源代码并转到 package org.apache.cassandra.service.ClientState;找到validateLogin()andensureNotAnonymous()函数并注释所有包含的代码,最终得到:

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");
} 

第2步 -在 cassandra.yaml 中更改为 AllowAllAuthenticator 第 3 步和第 4 步- 简单! 第 5 步- 从 cqlsh 执行此插入语句:

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

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

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

于 2013-11-18T18:19:54.353 回答