Как сбросить потерянный пароль пользователя Cassandra admin?

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

3 ответов


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

  1. переключиться на Аутентификатор: AllowAllAuthenticator
  2. перезагрузка Кассандра
  3. UPDATE system_auth.credentials SET salted_hash = 'a$H46haNkcbxlbamyj0OYZr.v4e5L08WTiQ1scrTs9Q3NYy.6B..x4O' WHERE username='cassandra';
  4. переключитесь обратно на Аутентификатор: PasswordAuthenticator
  5. перезагрузка Кассандра
  6. войти как Кассандра/Ситония
  7. создать пользователя и изменить пользователя к содержанию вашего сердца.

решено со следующими шагами:

  1. изменить Аутентификатор в cassandra.yaml чтобы AllowAllAuthenticator и перезапустить Cassandra
  2. cqlsh
  3. update system_auth.credentials set salted_hash='a$vbfmLdkQdUz3Rmw.fF7Ygu6GuphqHndpJKTvElqAciUJ4SZ3pwquu' where username='cassandra';
  4. выход cqlsh
  5. измените Аутентификатор на PasswordAuthenticator и перезапустите Cassandra

теперь вы можете войти в с

cqlsh -u cassandra -p 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.семейство столбцов учетных данных
  2. изменить Аутентификатор для AllowAllAuthenticator
  3. Старт C*
  4. войти с cqlsh без пароля
  5. обновить хэш-пароль пользователя cassandra
  6. отменить изменения источника и вернуться к 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 в Кассандре.и YAML Шаг 3 & 4 - просто! Шаг 5 - выполните эту инструкцию insert из cqlsh:

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

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

Шаг 6 исправить, удалив источник validateLogin() и ensureNotAnonymous() и переключиться обратно на PasswordAuthenticator в Кассандре.yaml, теперь у вас должен быть доступ к cqlsh via ./ cqlsh-u cassandra-P Кассандра