Как сбросить потерянный пароль пользователя Cassandra admin?
У меня есть полный доступ к установочным файлам Cassandra и PasswordAuthenticator, настроенным в cassandra.yaml
. Что мне нужно сделать, чтобы сбросить пароль администратора, который был потерян, сохраняя при этом существующие базы данных нетронутыми?
3 ответов
хэш изменился для Cassandra 2.1:
- переключиться на Аутентификатор: AllowAllAuthenticator
- перезагрузка Кассандра
UPDATE system_auth.credentials SET salted_hash = 'a$H46haNkcbxlbamyj0OYZr.v4e5L08WTiQ1scrTs9Q3NYy.6B..x4O' WHERE username='cassandra';
- переключитесь обратно на Аутентификатор: PasswordAuthenticator
- перезагрузка Кассандра
- войти как Кассандра/Ситония
- создать пользователя и изменить пользователя к содержанию вашего сердца.
решено со следующими шагами:
- изменить Аутентификатор в
cassandra.yaml
чтобы AllowAllAuthenticator и перезапустить Cassandra cqlsh
update system_auth.credentials set salted_hash='a$vbfmLdkQdUz3Rmw.fF7Ygu6GuphqHndpJKTvElqAciUJ4SZ3pwquu' where username='cassandra';
- выход
cqlsh
- измените Аутентификатор на 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 способ, но он требует изменения исходного кода.
сначала обзор высокого уровня:
- изменить источник, чтобы вы могли вносить изменения в system_auth.семейство столбцов учетных данных
- изменить Аутентификатор для 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 в Кассандре.и 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 Кассандра