У меня есть полный доступ к установочным файлам Cassandra и PasswordAuthenticator, настроенным в cassandra.yaml
. Что мне нужно сделать для пароля пользователя reset admin, который был утерян, при сохранении существующих баз данных?
Как reset потерянный пароль администратора Cassandra?
Ответ 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