はじめに
この記事は、正しいパスワードで MySQL にログインしようとしているが、エラーが発生しているユーザーのためのものです。 “Error 1045: Access denied for user (using password: YES)”
MySQL root パスワードを忘れてしまった場合は、この記事を参照してください。
- MySQL root パスワードをリセットする方法。
phpMyAdmin から root としてログインしようとしている場合、以下を参照してください:
- Can’t log into phpMyAdmin: mysqli_real_connect(): (HY000/1698)です。 Access denied for user ‘root’@’localhost’
Understanding MySQL Users and Hosts
MySQL はユーザーの host
値に基づき、ユーザーのアクセスを制限しています。 デフォルトでは、ルートアカウントと新規ユーザーの host
値は localhost
に設定されており、ローカルマシンまたは同じローカルホストにインストールされている場合は phpMyAdmin 経由でのみログインできることを意味します。 localhost
アカウントにリモートでログインしようとすると、「Access denied for user (using password: YES)」と正しいパスワードが拒否されることがあります。
例として、以下のシンプルな MySQL ユーザー リストを見てみましょう:
+------------------+-------------+| User | Host |+------------------+-------------+| test-user1 | localhost || test-user3 | 10.0.53.185 || test-user2 | % |
上記では、異なる host
値の MySQL ユーザーが 3 つあります。
host
値によって正しいパスワードが拒否される可能性があるいくつかのシナリオを見てみましょう:
- User
- ✅
localhost
からログインできる、つまり MySQL サービスを実行しているマシンからログインできる。 - ✅ 同じローカルホスト上にインストールされていれば phpMyAdmin からログインできます。
- ❌ リモートでログインできない場合、「Access denied for user (using password: YES)」と表示されることがあります。
- ✅
- User
- ✅ IPアドレス
10.0.53.185
. - ❌以外のIPアドレスからはログインできない “Access denied for user (using password: YES) “となる。
- ❌ localhostからログインできない “Access denied for user (using password: YES)”.
- ❌ phpMyAdminからログインできない “Access denied for user (using password: YES)”.
- ❌ localhostからログインできない “Access denied for user (using password: YES)”.
- ✅ IPアドレス
- User
%
- ✅ どこからでもログインできる(
%
はワイルドカード)。
- ✅ どこからでもログインできる(
MySQL ユーザーのホスト値の変更
MySQL ルート アカウントまたはスーパーユーザー特権を持つ任意のアカウントを使用して、ユーザーのホスト値を変更することができます。 これは、コマンドラインまたは phpMyAdmin を介して行うことができます。
コマンドライン経由
ルートまたは MySQL Users テーブルにアクセスできるスーパーユーザーを使用して、MySQL データベースにアクセスする必要があります。
mysql -u root -p
ローカルの MySQL データベースにログインする場合、hostname_or_ip
を自分のものに置き換えるだけでよい。
SELECT User,Host FROM mysql.user;
Result:
+------------------+-------------+| User | Host |+------------------+-------------+| test-user1 | localhost || test-user3 | 10.0.53.185 || test-user2 | % |+------------------+-------------+3 rows in set (0.00 sec)
上に MySQL ユーザーとそのホストのリストが表示されます。
どこからでもリモートでtest-user1
を使ってログインしたい場合、ホスト値をワイルドカード %
に変更する必要があり、これによりどこからでもリモート ログインできるようになります。 セキュリティを強化するには、これを IP アドレスに変更します。
以下の例では、test-user1
のホストを localhost
から %
%
はワイルドカードの意味で、このユーザーがどこからでもリモートでログインできるようにするためのものです。
RENAME USER 'test-user1'@'localhost' TO 'test-user1'@'%';
変更を反映させるには MySQL 権限をフラッシュする必要があります。
FLUSH PRIVILEGES;
ここでもう一度リモートでログインしてみます。
- phpMyadminにログインしたら、左側の列で
mysql
データベースをクリックします。 - SQLタブをクリックします。
- SQLクエリーボックスにタイプまたはペーストしてください。
SELECT User,Host FROM mysql.user;
データベース内のすべての MySQL ユーザーを一覧表示します。 - Click Go でクエリを実行します。
これで、すべての MySQL ユーザーとそのホストが一覧に表示されるはずです。
MySQl ユーザーのホスト値を変更するには:
- 変更したいユーザーの横のホスト フィールドをダブルクリックします(下図では赤色)。
- キーボードの
ENTER
を押して変更を保存します。
まだ完了していません。 MySQL 権限をフラッシュする必要があります。
- Click the SQL tab again
- Type or paste into the SQL query box:
FLUSH PRIVILEGES;
- [Go]をクリックして、クエリを実行します。
これで、リモートでログインできるようになりました。
これが役に立ったか教えて下さい。 Twitter、Facebook、YouTubeでフォローするか、🍊スムージーを買ってください。
p.s. AIを使ってAdSenseの収益を200%増やしました🤖。 私のエゾイックのレビューを読んで、その方法を確認してください。