У меня есть полный доступ к установочным файлам Cassandra и PasswordAuthenticator, настроенному в cassandra.yaml
. Что мне нужно сделать, чтобы сбросить утерянный пароль пользователя-администратора, сохранив при этом существующие базы данных?
Как сбросить потерянный пароль администратора Cassandra?
Ответы (3)
Хэш изменился для Cassandra 2.1:
- Переключиться на аутентификатор: AllowAllAuthenticator
- Перезапустить кассандру
UPDATE system_auth.credentials SET salted_hash = '$2a$10$H46haNkcbxlbamyj0OYZr.v4e5L08WTiQ1scrTs9Q3NYy.6B..x4O' WHERE username='cassandra';
- Вернуться к аутентификатору: PasswordAuthenticator
- Перезапустить кассандру
- Войти как кассандра/кассандра
- CREATE USER и ALTER USER сколько душе угодно.
Решается следующими шагами:
- Измените аутентификатор в
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
и сменить пароль на другой.
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;
ИЗМЕНИТЬ
О, мальчик, это будет весело! Итак, я нашел один хактатический способ, но он требует изменения исходного кода.
Сначала общий обзор:
- Отредактируйте источник, чтобы вы могли вносить изменения в семейство столбцов system_auth.credentials.
- Измените аутентификатор на AllowAllAuthenticator.
- Старт С*
- Войдите с помощью cqlsh без пароля
- Обновите хэш-пароль пользователя cassandra
- Отмените исходные изменения и вернитесь к 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
ALTER USER
не вариант, так как пароль администратора утерян, и у меня нет доступа к консоли cqlsh. Также изменение аутентификатора на AllowAllAuthenticator не помогает, потому что в этом случае ALTER USER
не работает, даже если я могу получить доступ к консоли.
- person Eemeli Kantola; 19.11.2013