私は、Cassandra インストール ファイルと、で構成された PasswordAuthenticator に完全にアクセスできますcassandra.yaml
。既存のデータベースをそのまま維持しながら、紛失した管理者ユーザーのパスワードをリセットするにはどうすればよいですか?
3 に答える
次の手順で解決しました。
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
パスワードを別のものに変更します。
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;
編集
ああ、これは楽しそうですね!それで、ハック的な方法を 1 つ見つけましたが、ソースコードを変更する必要があります。
最初に高レベルの概要:
- system_auth.credentials 列ファミリーを変更できるようにソースを編集します。
- オーセンティケーターを AllowAllAuthenticator に変更します
- C* を開始
- パスワードを必要とせずに cqlsh でログインする
- cassandra ユーザーのハッシュ パスワードを更新する
- ソースの変更を元に戻し、PasswordAuthenticator に戻します。
ステップ 1 - ソースの編集
C* ソースを開き、package に移動しますorg.apache.cassandra.service.ClientState
。validateLogin()
and関数を見つけて、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");
}
Step2 - cassandra.yaml で AllowAllAuthenticator に変更 Step3 & 4 - シンプル! ステップ 5 - cqlsh から次の挿入ステートメントを実行します。
insert into system_auth.credentials (username, options, salted_hash)
VALUES ('cassandra', null, '$2a$10$vbfmLdkQdUz3Rmw.fF7Ygu6GuphqHndpJKTvElqAciUJ4SZ3pwquu');
注* ステップ 5 は、「cassandra」という名前のユーザーが既に作成されていると想定して機能します。別のユーザーを作成した場合は、挿入するユーザー名を切り替えるだけです (この手順ではパスワードがリセットされますが、新しいユーザーは追加されません)。
ステップ 6validateLogin()
コメントを外してソースを修正し ensureNotAnonymous()
、cassandra.yaml の PasswordAuthenticator に戻します。これで、./cqlsh -u cassandra -p cassandra 経由で cqlsh にアクセスできるようになります。