Как reset потерянный пароль администратора Cassandra?

У меня есть полный доступ к установочным файлам Cassandra и PasswordAuthenticator, настроенным в cassandra.yaml. Что мне нужно сделать для пароля пользователя reset admin, который был утерян, при сохранении существующих баз данных?

Ответ 1

Решено выполнить следующие действия:

  • Изменить аутентификатор в cassandra.yaml на AllowAllAuthenticator и перезапустить Cassandra
  • cqlsh
  • update system_auth.credentials set salted_hash='$2a$10$vbfmLdkQdUz3Rmw.fF7Ygu6GuphqHndpJKTvElqAciUJ4SZ3pwquu' where username='cassandra';
  • Выход cqlsh
  • Замените аутентификатор на PasswordAuthenticator и перезапустите Cassandra

Теперь вы можете войти в систему с помощью

cqlsh -u cassandra -p cassandra

и измените пароль на что-то еще.

Ответ 2

Хэш изменился для Cassandra 2.1:

  • Переключиться на аутентификатор: AllowAllAuthenticator
  • Перезапустить cassandra
  • UPDATE system_auth.credentials SET salted_hash = '$2a$10$H46haNkcbxlbamyj0OYZr.v4e5L08WTiQ1scrTs9Q3NYy.6B..x4O' WHERE username='cassandra';
  • Вернитесь к аутентификатору: PasswordAuthenticator
  • Перезапустить cassandra
  • Войти как cassandra/cassandra
  • СОЗДАЙТЕ ПОЛЬЗОВАТЕЛЯ И ПОЛЬЗОВАТЕЛЯ ПОЛЬЗОВАТЕЛЯ к вашему сердечному содержанию.

Ответ 3

Как 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;

ИЗМЕНИТЬ

О, мальчик, это будет весело! Итак, я нашел один хакстастический путь, но для этого требуется изменить исходный код.

Сначала просмотрите высокий уровень:

  • Измените источник, чтобы вы могли вносить изменения в семейство столбцов system_auth.credentials
  • Измените аутентификатор на AllowAllAuthenticator
  • Начать C *
  • Войдите в систему cqlsh, не требуя пароля.
  • Обновление пароля хэш-пароля пользователя cassandra
  • Отмените исходные изменения и вернитесь к PasswordAuthenticator.

Шаг 1 - отредактируйте источник

Откройте источник C * и перейдите в пакет org.apache.cassandra.service.ClientState; Найдите функции validateLogin() и ensureNotAnonymous() и прокомментируйте все содержащиеся coude, чтобы вы закончили:

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. Перейдите в AllowAllAuthenticator в cassandra.yaml. Шаг 3 и 4 - Простой! Шаг 5. Выполните эту инструкцию insert из cqlsh:

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

Примечание * шаг 5 будет работать, если пользователь, получивший имя cassandra, уже создан. Если у вас есть другой пользователь, просто измените имя пользователя, которое вы вставляете (эта процедура сбрасывает пароль, не добавляет нового пользователя).

Шаг 6 Исправить исходный код, раскомментировав validateLogin() и ensureNotAnonymous(), и вернитесь к PasswordAuthenticator в cassandra.yaml, теперь у вас должен быть доступ к cqlsh через. /cqlsh -u cassandra - p cassandra