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

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


person Eemeli Kantola    schedule 23.08.2013    source источник


Ответы (3)


Хэш изменился для 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. Войти как кассандра/кассандра
  7. CREATE USER и ALTER USER сколько душе угодно.
person stub    schedule 06.01.2015
comment
Я получаю следующее: InvalidRequest: код = 2200 [Неверный запрос] сообщение = ненастроенные учетные данные таблицы - person ealfonso; 18.05.2017

Решается следующими шагами:

  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

и сменить пароль на другой.

person Eemeli Kantola    schedule 02.12.2013
comment
Я получаю следующее: InvalidRequest: code=2200 [Invalid query] message="unconfigured table credentials" - person ealfonso; 18.05.2017

Кассандра 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. Старт С*
  4. Войдите с помощью cqlsh без пароля
  5. Обновите хэш-пароль пользователя cassandra
  6. Отмените исходные изменения и вернитесь к PasswordAuthenticator.

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

Шаг 2. Измените на AllowAllAuthenticator в cassandra.yaml. Шаги 3 и 4. Просто! Шаг 5. Выполните этот оператор вставки из 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

person Lyuben Todorov    schedule 18.11.2013
comment
ALTER USER не вариант, так как пароль администратора утерян, и у меня нет доступа к консоли cqlsh. Также изменение аутентификатора на AllowAllAuthenticator не помогает, потому что в этом случае ALTER USER не работает, даже если я могу получить доступ к консоли. - person Eemeli Kantola; 19.11.2013
comment
@EemeliKantola Извините, я ошибся, хотя у вас был доступ к cqlsh с правами администратора! Я опубликовал исправление, но, к сожалению, оно требует смены источника. - person Lyuben Todorov; 19.11.2013
comment
Ситуация, когда пароль администратора был утерян, указана в заголовке, но я отредактировал текст вопроса, чтобы уточнить это для ясности. - person Eemeli Kantola; 20.11.2013
comment
Проблема решилась проще, без модификации кода. - person Eemeli Kantola; 02.12.2013