認証の壁に突き当たる
アプリケーションを Redis サーバーに接続すると、通常はシンプルな PONG レスポンスが返ってくるはずです。しかし、代わりに WRONGPASS エラーというもどかしい壁に突き当たることがあります。エラーは次のように表示されます:
WRONGPASS invalid username-password pair or user is disabled.
この特定のエラーメッセージは Redis 6.0 のリリースとともに登場しました。単一の requirepass ディレクティブですべてを処理していた古いバージョンに慣れている場合、このマルチユーザー対応の挙動は分かりにくいかもしれません。これは、提供された認証情報がアクセスコントロールリスト(ACL)のエントリと一致しないか、ターゲットとしている特定のアカウントが現在無効化されていることを意味します。
Redis 6 以降でこのエラーが発生する理由
バージョン 6.0 より前、Redis の認証は単純なバイナリチェックでした。グローバルパスワードを知っているかどうかのどちらかでした。Redis 6 では ACL(アクセスコントロールリスト) が導入され、データベースにきめ細かな権限設定と複数ユーザーのサポートがもたらされました。ACL を使っているつもりがなくても、Redis 6 以降はレガシーな requirepass システムを default ユーザーにマッピングすることで管理しています。
WRONGPASS が発生する場合、通常は以下の 3 つのシナリオのいずれかが原因です:
- ユーザー名の欠如: クライアントがパスワードのみを送信していますが、サーバーはリクエストを検証するためにユーザー名(通常は
default)を期待しています。 - 認証情報の不一致: 特定の ACL アカウントのユーザー名またはパスワードにタイポ(入力ミス)があります。
- アカウントの無効化: ユーザーは ACL テーブルに存在しますが、明示的に
offに設定されています。
ステップ 1:redis-cli でデバッグする
アプリケーションのコードを介さず、直接ソースを確認しましょう。サーバー上でコマンドラインインターフェース(CLI)を直接使用することで、問題が設定にあるのか、それともアプリケーションの接続文字列にあるのかを判断できます。
ポート 6379 で default ユーザーとして手動で認証を試みます:
redis-cli
> AUTH default your_password_here
ログインに成功すると OK が返されます。依然として WRONGPASS が表示される場合は、問題は確実にサーバー側の設定にあります。
ステップ 2:ACL リストの検査
(protected-mode 設定により)AUTH をバイパスしてローカル接続でログインできる場合は、ユーザーのステータスを確認してください。次のコマンドを実行します:
redis-cli
> ACL LIST
default ユーザーのエントリを詳しく見てください。通常は以下のようになっています:
user default on nopass ~* &* + @all
off と表示されている場合、ユーザーは無効化されています。>9f86d... のような文字列が表示されている場合、パスワードが必要です。設定が期待通りでない場合は、redis.conf または外部の users.acl ファイルを確認してください。
ステップ 3:'Default' ユーザー設定の修正
現代の Redis 環境では、requirepass は default ユーザーのパスワードのショートカットとして機能します。多くの開発者は、アップグレードによってこれらの設定が競合した際にエラーに遭遇します。redis.conf(多くの場合 /etc/redis/ にあります)を探し、次の行を確認してください:
requirepass your_strong_password
(管理者権限がある前提で)CLI を通じてロックアウトされたデフォルトユーザーをすぐに修正するには、次のコマンドを使用します:
ACL SETUSER default on >your_strong_password + @website/content/errors/ja/vscode/fix-vs-code-error-xhr-failed-when-installing-or-searching-extensions.md ~*
ステップ 4:専用ユーザーの使用(推奨)
すべてのサービスで default ユーザーに頼ることはセキュリティ上のリスクです。ベストプラクティスは、認証情報の漏洩による被害を抑えるために、アプリケーションごとに専用のアカウントを作成することです。
すべてのキーとコマンドにアクセスできる専用の app_user を作成するには、次のようにします:
ACL SETUSER app_user on >another_secure_password + @website/content/errors/ja/vscode/fix-vs-code-error-xhr-failed-when-installing-or-searching-extensions.md ~*
ユーザー名とパスワードの両方を使用するようにアプリケーションを更新してください。古い Redis ライブラリはパスワード文字列のみを受け入れていましたが、現代のドライバは ACL 互換性のために両方を必要とします。
例:接続文字列の形式
redis-py や ioredis などのライブラリ向けの現代的な接続文字列は、次の URI 形式に従う必要があります:
redis://app_user:another_secure_password @localhost:6379
セキュリティと永続化のヒント
脆弱なパスワードは、管理者がアプリケーションの更新を忘れることで WRONGPASS エラーを引き起こす原因になりがちです。安全な設定は、エントロピーの高い(複雑な)文字列から始まります。これらを生成するには、ToolCraft のパスワード生成ツールなどのツールが最適です。これらはブラウザ上でローカルに動作するため、秘密情報がリモートサーバーに記録される心配がありません。
最後に、変更が再起動後も保持されるようにしてください。redis-cli 経由でユーザーを変更した場合、永続化しない限りサービス再起動時に消えてしまいます。外部 ACL ファイルを使用している場合は、以下を実行してください:
ACL SAVE
注意:このコマンドは、redis.conf で aclfile のパスが定義されている場合にのみ機能します。インライン設定を使用している場合は、変更を永続的なものにするために redis.conf ファイルを手動で更新する必要があります。
最終確認
新しい認証情報でログインし、基本的なコマンドをテストして修正を確認します:
redis-cli
> AUTH app_user another_secure_password
OK
> PING
PONG
PONG が表示されれば、ACL システムを適切に設定し、WRONGPASS エラーを解決できたことになります。

