14

私は、Cassandra インストール ファイルと、で構成された PasswordAuthenticator に完全にアクセスできますcassandra.yaml。既存のデータベースをそのまま維持しながら、紛失した管理者ユーザーのパスワードをリセットするにはどうすればよいですか?

4

3 に答える 3

7

次の手順で解決しました。

  1. cassandra.yamlオーセンティケータを AllowAllAuthenticator に変更し、Cassandra を再起動します
  2. cqlsh
  3. update system_auth.credentials set salted_hash='$2a$10$vbfmLdkQdUz3Rmw.fF7Ygu6GuphqHndpJKTvElqAciUJ4SZ3pwquu' where username='cassandra';
  4. 出口cqlsh
  5. オーセンティケーターを PasswordAuthenticator に戻し、Cassandra を再起動します。

でログインできるようになりました

cqlsh -u cassandra -p cassandra

パスワードを別のものに変更します。

于 2013-12-02T17:13:46.530 に答える
6

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 つ見つけましたが、ソースコードを変更する必要があります。

最初に高レベルの概要:

  1. system_auth.credentials 列ファミリーを変更できるようにソースを編集します。
  2. オーセンティケーターを AllowAllAuthenticator に変更します
  3. C* を開始
  4. パスワードを必要とせずに cqlsh でログインする
  5. cassandra ユーザーのハッシュ パスワードを更新する
  6. ソースの変更を元に戻し、PasswordAuthenticator に戻します。

ステップ 1 - ソースの編集

C* ソースを開き、package に移動しますorg.apache.cassandra.service.ClientStatevalidateLogin()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 にアクセスできるようになります。

于 2013-11-18T18:19:54.353 に答える