MySQLエラー1045(28000):ユーザー 'bill' @ 'localhost'のアクセスが拒否されました(パスワードを使用:YES)


430

最初に、私は多くの提案された質問を行ったが、関連する答えは見つからなかったことを述べさせてください。これが私がやっていることです。

Amazon EC2インスタンスに接続しています。次のコマンドを使用して、MySQLルートでログインできます。

mysql -u root -p

次に、ホスト%で新しいユーザー請求書を作成しました

CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';

ユーザーbillにすべての特権を付与しました:

grant all privileges on *.* to 'bill'@'%' with grant option;

次に、rootユーザーを終了し、billでログインしてみます。

mysql -u bill -p

正しいパスワードを入力してこのエラーが発生しました:

エラー1045(28000):ユーザー 'bill' @ 'localhost'のアクセスが拒否されました(パスワードを使用:YES)


34
しましたかFLUSH PRIVILEGES
eggyal

6
さて、私はこれを試みましたが成功しませんでした。他の提案をしてください。
Ali

1
実行しているサーバーのバージョンは何ですか?5.1がこれに関して奇妙な動作をするのを見てきました。
プードルハット2012年

2
これはMagentoのインストール中に私に起こり、私はかなり愚かな間違いをしました。置く「のmysql -u -p MagentoのMagentoの」パスワードの入力を促したし、代わりにデフォルトのパスワードの私がrootのパスワードを入れていた。
AmirHd

2
@authentictech残念ながら、この質問が投稿された時点では、提案された解決策はどれも機能しませんでした。私がこの状況から抜け出すのを助けた私自身の答えを見てください。それが私がそれらのどれも答えとしてマークしなかった理由です。おそらく、最高ランクの応答を回答としてマークできます。
Ali

回答:


442

おそらく匿名ユーザー''@'localhost'または''@'127.0.0.1'です。

あたりとしてマニュアル

複数の一致が可能な場合、サーバーはそれらのどれを使用するかを決定する必要があります。この問題は次のように解決されます:(...)

  • クライアントが接続を試みると、サーバーは[テーブルmysql.userの]行をソート順に調べます。
  • サーバーは、クライアントのホスト名とユーザー名に一致する最初の行を使用します。

(...)サーバーは、最も具体的なHost値を持つ行を最初に並べ替える並べ替えルールを使用します。リテラルホスト名['localhost'など]とIPアドレスが最も具体的です。

したがって、そのような匿名ユーザーは'[any_username]'@'%'、から接続するときに他のユーザーのように「マスク」しlocalhostます。

'bill'@'localhost'は一致しますが'bill'@'%'''@'localhost'事前に(たとえば)一致します。

推奨される解決策は、この匿名ユーザーを削除することです(これは通常、とにかく良いことです)。


以下の編集は、主な質問にはほとんど関係ありません。これらは、このスレッド内の他のコメントで提起されたいくつかの質問に答えるためのものです。

編集1

'bill'@'%'ソケット経由での認証。

    root @ myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass --socket = / tmp / mysql-5.5.sock
    MySQLモニターへようこそ(...)

    mysql> SELECT user、host FROM mysql.user;
    + ------ + ----------- +
    | ユーザー| ホスト|
    + ------ + ----------- +
    | ビル| %|
    | ルート| 127.0.0.1 |
    | ルート| :: 1 |
    | ルート| localhost |
    + ------ + ----------- +
    セット内の4行(0.00秒)

    mysql> SELECT USER()、CURRENT_USER();
    + ---------------- + ---------------- +
    | USER()| CURRENT_USER()|
    + ---------------- + ---------------- +
    | bill @ localhost | bill @%|
    + ---------------- + ---------------- +
    セット内の1行(0.02秒)

    mysql> SHOW VARIABLES LIKE 'skip_networking';
    + ----------------- + ------- +
    | 変数名| 値|
    + ----------------- + ------- +
    | skip_networking | オン|
    + ----------------- + ------- +
    セット内の1行(0.00秒)

編集2

ネットワーキングを再度アクティブにし、匿名ユーザーを作成することを除いて、まったく同じ設定''@'localhost'です。

    root @ myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql
    MySQLモニターへようこそ(...)

    mysql> CREATE USER '' @ 'localhost' IDENTIFIED BY 'anotherpass';
    クエリは正常、0行が影響を受けた(0.00秒)

    mysql>さようなら

    root @ myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
        --socket = / tmp / mysql-5.5.sock
    エラー1045(28000):ユーザー 'bill' @ 'localhost'のアクセスが拒否されました(パスワードを使用:YES)
    root @ myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
        -h127.0.0.1 --protocol = TCP
    エラー1045(28000):ユーザー 'bill' @ 'localhost'のアクセスが拒否されました(パスワードを使用:YES)
    root @ myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
        -hlocalhost --protocol = TCP
    エラー1045(28000):ユーザー 'bill' @ 'localhost'のアクセスが拒否されました(パスワードを使用:YES)

編集3

編集2と同じ状況で、匿名ユーザーのパスワードが提供されます。

    root @ myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -panotherpass -hlocalhost
    MySQLモニターへようこそ(...)

    mysql> SELECT USER()、CURRENT_USER();
    + ---------------- + ---------------- +
    | USER()| CURRENT_USER()|
    + ---------------- + ---------------- +
    | bill @ localhost | @localhost |
    + ---------------- + ---------------- +
    セット内の1行(0.01秒)

結論1、編集1から:'bill'@'%'ソケットを介してのように認証できます。

結論2、編集2から:TCPを介して接続するか、ソケットを介して接続するかは、認証プロセスに影響を与えません('something'@'localhost'明らかに、ソケットを介して接続する以外は誰も接続できません)。

結論3、編集3から:を指定し-ubillましたが、匿名ユーザーとしてアクセスが許可されています。これは、上記の「分類ルール」が原因です。ほとんどのデフォルトのインストールでは、パスワードなしの匿名ユーザーが存在する(そして保護/削除する必要がある)ことに注意してください。


9
'bill' @ 'localhost'がなぜ私と同じように '' @ 'localhost'と一致するのか知りたい人は、空の文字列がMySQLの認証アルゴリズムでワイルドカードとして機能します。
ディーンまたは

2
@Sanjaこの回避策には特に注意してください。任意の場所からデータベースへの匿名アクセスを許可している可能性があります。疑わしい場合は、ユーザーを削除します。
RandomSeed 2013年

7
@RandomSeedこのコメントありがとうございます!おそらく私は匿名ユーザーを削除するだけです。PS私はdev.mysql.com/doc/refman/5.1/en/default-privileges.htmlを見つけましたこれは、これらのユーザーが確実に削除できることを示しています:DROP USER ''@'localhost';。特別な目的には必要ありません。
Alex

1
匿名ユーザーを削除しましたが、まだ機能しませんでした。その後、「FLUSH PRIVILEGES」も発行する必要があることに気づきました。それについても言及しておくと役に立ちます。
Neeme Praks、2014

2
これが答えです!すべてのmysqlマニュアルでこれが太字の大文字で表示されないのはなぜですか。匿名ユーザーを削除すると、LocalHostからログインしようとする試みがすべて強制終了されます。
セルゲイ

140

試してください:

~$ mysql -u root -p
Enter Password:

mysql> grant all privileges on *.* to bill@localhost identified by 'pass' with grant option;

10
これはかなり危険です。もし誰かがあなたのbill @ localhost mysqlアカウントをハッキングすると、彼はmysqlサーバーのすべてのデータベースに無限にアクセスできるようになります。
アドニスK.カクリディス

2
ホエイ。私のユーザー 'myusername'@'myhost.static.myip.com'を引用符で囲む必要がありましたが、うまくいきました。
bendecko 2014年

それは私にとってはうまくいきますが、ユーザーに与えた権限が多すぎると思います
Csaba Toth

1
あなたがした@CsabaToth、あなたのユーザーが彼が必要とするものを持ち、それ以上なくなるまで特権を再度減らしてください。
2015

...そして、これにより「ユーザー 'root' @ 'localhost'のアクセスが拒否されました(パスワード:YESを使用)」と表示されたらどうしますか?
グルニオンシャトーイ

75

あなたが走ったとき

mysql -u bill -p

このエラーが発生しました

ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)

mysqldは次のように接続することを期待しています bill@localhost

作成してみてください bill@localhost

CREATE USER bill@localhost IDENTIFIED BY 'passpass';
grant all privileges on *.* to bill@localhost with grant option;

リモートで接続する場合は、DNS名、パブリックIP、またはTCP / IPを使用した127.0.0.1のいずれかを指定する必要があります。

mysql -u bill -p -hmydb@mydomain.com
mysql -u bill -p -h10.1.2.30
mysql -u bill -p -h127.0.0.1 --protocol=TCP

ログインしたら、これを実行してください

SELECT USER(),CURRENT_USER();

USER()は、MySQLで認証を試みた方法を報告します

CURRENT_USER()は、mysql.userテーブルからMySQLでの認証が許可された方法を報告します

これにより、mysqlへのログインが許可された方法と理由がよりよくわかります。なぜこの見方が重要なのですか?これは、ユーザー認証順序付けプロトコルと関係があります。

次に例を示します。デスクトップMySQLに匿名ユーザーを作成します

mysql> select user,host from mysql.user;
+---------+-----------+
| user    | host      |
+---------+-----------+
| lwdba   | %         |
| mywife  | %         |
| lwdba   | 127.0.0.1 |
| root    | 127.0.0.1 |
| lwdba   | localhost |
| root    | localhost |
| vanilla | localhost |
+---------+-----------+
7 rows in set (0.00 sec)

mysql> grant all on *.* to x@'%';
Query OK, 0 rows affected (0.02 sec)

mysql> select user,host from mysql.user;
+---------+-----------+
| user    | host      |
+---------+-----------+
| lwdba   | %         |
| mywife  | %         |
| x       | %         |
| lwdba   | 127.0.0.1 |
| root    | 127.0.0.1 |
| lwdba   | localhost |
| root    | localhost |
| vanilla | localhost |
+---------+-----------+
8 rows in set (0.00 sec)

mysql> update mysql.user set user='' where user='x';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql> select user,host from mysql.user;
+---------+-----------+
| user    | host      |
+---------+-----------+
|         | %         |
| lwdba   | %         |
| mywife  | %         |
| lwdba   | 127.0.0.1 |
| root    | 127.0.0.1 |
| lwdba   | localhost |
| root    | localhost |
| vanilla | localhost |
+---------+-----------+
8 rows in set (0.00 sec)

mysql>

わかりました、匿名ユーザーとしてログインします。

C:\MySQL_5.5.12>mysql -urol -Dtest -h127.0.0.1 --protocol=TCP
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.5.12-log MySQL Community Server (GPL)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select user(),current_user();
+---------------+----------------+
| user()        | current_user() |
+---------------+----------------+
| rol@localhost | @%             |
+---------------+----------------+
1 row in set (0.00 sec)

mysql>

認証の順序は非常に厳密です。最も具体的なものから最低のものまでチェックします。この認証スタイルについては、DBA StackExchangeで書きました

必要に応じて、mysqlクライアントのプロトコルとしてTCPを明示的に呼び出すことを忘れないでください。


1
'bill'@'localhost'一致'bill@%'する必要がありますね。
RandomSeed

@Yakソート順は、mysql.userのユーザー列のみに基づいているわけではありません。MySQLは、それ自体では文字照合を行いません。私はDBA StackExchangeのユーザー認証順序付けプロトコルについて書きました:dba.stackexchange.com/a/10897/877
RolandoMySQLDBA

@YaKこれが私が特に言及した理由SELECT USER(),CURRENT_USER();です。本当に貧弱なセットアップを除いて、これら2つの関数から匿名ユーザーが表示されることはほとんどありません。
RolandoMySQLDBA 2012年

1
並べ替え順序がのみに基づいているとは思いませんでしたmysql.user。実際、私の回答をもう一度読むと、ソート順はhost最初に列に基づいていると(実際には、マニュアルで言う)言ったことがわかります。あなたは現在の資格情報を確認する方法について多くのことを書きましたが、なぜとして'bill'@'localhost'ログインできないのかについての情報はほとんどありません'bill'@'%'。今日の質問であるAFAIKです。OPの設定はおそらく不十分です。これが彼がこれらのエラーを受け取る理由です。
RandomSeed

2
--protocol=TCP鍵でした どうもありがとうございました!
lfx 2014年

22

これに超遅い

私はこれらすべての他の答えを試し、多くの異なるバージョンを実行しましたmysql -u root -pが、単に実行したことはありません


mysql -u root -p

そして[ENTER]、パスワードを押すだけです。


私がやったらそれはうまくいった。これが誰かを助けることを願っています。


18

私の場合の関連する問題は、次を使用して接続しようとしたことです:

mysql -u mike -p mypass

空白は明らかに-u#uname#の間では許可されていますが、-pと#password#の間では許可されていません

したがって必要:

mysql -u mike -pmypass

それ以外の場合、-p mypassの間に空白があれば、 mysqlは 'mypass'をデータベース名として受け取ります。


1
または:mysql -u usrname -p-新しい行をドロップし、パスワードを表示せずに要求するため、誰もパスワードを見ることができなくなります

すばらしい回答@mstram
Arpit

1
このソリューションは快適ですが、パスワードを入力するのは明らかに安全ではありませんが、タイプに特権を与えたり、他のものを定義したりする必要はありません。Macブックがセキュリティで保護されている場合–このアプローチは非常に快適です。さらに、Docker mysqlドライバーからawsにデータをインポートするために使用しました。
dimpiax

17

と入力mysql -u root -pすると、ローカルのUNIXソケットを介してmysqlサーバーに接続します。

ただし、付与した許可は、'bill'@'%'不思議なことにTCP / IP接続にのみ一致します。

ローカルUNIXソケットへのアクセスを許可する場合は、 'bill' @ 'localhost'に特権を付与する必要があります。これは、奇妙なことに、 'bill' @ '127.0.0.1'とは異なります。

mysqlコマンドラインクライアントでTCP / IPを使用して接続することもできます。たとえば、実行しmysql -u root -p -h 192.168.1.123たり、ボックスにあるローカルIPアドレスなど、すでに付与した特権と一致させることができます。


「 'bill' @ '%'はTCP / IP接続にのみ一致する」これは誤りです。クリーン(処女、アウト・オブ・ボックス)インスタンス上でそれを試してskip-networking
RandomSeed

@YaK 'user' @ '%'をこのような設定で機能させることはできません。どうなると思われていましたか?
番号

ネットワークなしで(したがって、ソケットを介して)v5.0で「bill」@ '%'として接続できました。どのバージョンを使用していますか?私はv5.5でそれを試します。
RandomSeed 2012年

私の更新された答えを見てください。'bill'@'%'v5.5のソケット経由でログインできました。
RandomSeed

17

パスワードを忘れた場合、またはパスワードを変更したい場合。次の手順に従います。

1:mysqlを停止します

[root @ maomao〜]#service mysqld stop
MySQLの停止:[OK]

2:mysqlを再起動するには、「-skip-grant-tables」を使用します

[root @ mcy400〜]#mysqld_safe --skip-grant-tables
[root @ cy400〜]#/ var / lib / mysqlのデータベースを使用してmysqldデーモンを起動する

3:新しいウィンドウを開き、mysql -u rootと入力します

[root @ cy400〜]#mysql -u root
MySQLモニターへようこそ。コマンドは;で終わります。または\ g。

4:ユーザーデータベースを変更する

mysql>は、mysqlを使用して
、テーブルと列の名前を完成させるためにテーブル情報を読み取ります。

5:パスワードを変更します "()"に新しいパスワードを入力します

mysql> update user set password = password( 'root123')where user = 'root';
クエリは正常、3行が影響を受けた(0.00秒)
行が一致:3変更:3警告:0

6:フラッシュ

mysql>フラッシュ特権。

7:終了

mysql>
さようなら

8:mysqlを再起動します

[root @ cy400〜]#service mysqld restart;
MySQLの停止:[OK]
MySQLの開始:[OK]

ビンゴ!データベースをユーザー名と新しいパスワードに接続できます:

[root@cy400 ~]# mysql -u root -p <br>
Enter password: admin123 <br>
Welcome to the MySQL monitor.  Commands end with ; or \g. <br>
Your MySQL connection id is 2 <br>
Server version: 5.0.77 Source distribution <br>
Type 'help;' or '\h' for help. Type '\c' to clear the buffer. <br>
mysql> quit <br>
Bye

1
これは私には役立ちましたが、Macでは、自作でインストールした場合はそうですmysql.server stop。私の場合、ユーザー列がないため、ユーザー列を更新できませんでした。また、セーフモードであるため作成できませんでした。私が今やっていることは気にしませんが、正確な入力と出力が表示されているこの形式の回答に本当に感謝しています。ありがとう!
szeitlin 2016

すみません、これまでmacを使ったことがないので、あなたを助けることはできません。
Li Yingjun 2016

15

大きな頭痛の種を避けてください...パスワードに関する引用符が抜けていることが問題である可能性があります。少なくとも、それは3時間私を迂回した私のケースでした。

[client]
user = myusername
password = "mypassword"   # <----------------------- VERY IMPORTANT (quotes)
host = localhost

http://dev.mysql.com/doc/refman/5.7/en/option-files.html

「ここに典型的なユーザーオプションファイルがあります:」を検索し、そこに示されている例を参照してください。幸運を祈ります。誰か他の人を時間を節約したいと思っています。


1
これありがとう。私はこれで半日を無駄にしました、そしてパスワードについての愚かな引用はトリックをしました!
guyfromfl

はは。それが私に起こったとき、私はほとんど同じように浪費しました。お役に立ててうれしいです。
ミモレラ

12

解決策は、匿名(Any)ユーザーを削除することです!

私はまた、他の誰かによるサーバー設定で同じ問題に直面しました。私は通常、MySQLのインストール時に匿名ユーザーを作成することを選択しないため、これに気づかなかった。最初に「root」ユーザーとしてログインし、いくつかの「通常」ユーザー(別名、ユーザー名に接頭辞を付けたdbsでのみ特権を持つユーザー)を作成し、ログアウトしてから、最初の通常ユーザーを確認しました。ログインできませんでした。phpMyAdmin経由でもシェル経由でもありません。結局のところ、犯人はこの「すべての」ユーザーです。


11

私はやや似たような問題を抱えていました。MySQLに初めて入ろうとしたときに、rootアクセスが拒否されたことがわかりました。私が使用するのを忘れていたことが判明sudo...

したがって、root最初の試行で失敗した場合は、次のことを試してください。

sudo mysql -u root -p

次にパスワードを入力します。これでうまくいくはずです。


6

私が自分で見つけた最善の解決策は、

私のユーザーはソナーで、外部または他のマシンからデータベースに接続しようとするたびにエラーが発生します

ERROR 1045 (28000): Access denied for user 'sonar'@'localhost' (using password: YES)

また、私が別のマシンからこれを試しているので、ジェンキンスの仕事を通じてアクセスするための私のURLは

alm-lt-test.xyz.com

リモートで接続する場合は、次のようにさまざまな方法で指定できます。

mysql -u sonar -p -halm-lt-test.xyz.com
mysql -u sonar -p -h101.33.65.94
mysql -u sonar -p -h127.0.0.1 --protocol=TCP
mysql -u sonar -p -h172.27.59.54 --protocol=TCP

URLでこれにアクセスするには、次のクエリを実行する必要があります。

GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'alm-lt-test.xyz.com' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'127.0.0.1' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'172.27.59.54' IDENTIFIED BY 'sonar';

4

わかりました、わかりませんが、おそらくこれはmysqlのインストールディレクトリ内のmy.cnfファイルが原因です。この行をコメント化すると、問題が解決する可能性があります。

bind-address = 127.0.0.1

1
詳細については、こちらもご覧ください。wiki.bitnami.org/ Components / MySQL
Ali

1
これは問題ではないと確信しています。その場合、MySQLは127.0.0.1以外のホストからの接続を拒否し、SQLの「アクセス拒否」エラーは発生しません。
ペルマイスター

3

同じエラーが発生した異常な状況をお知らせください。おそらくこれは将来の誰かを助けるでしょう。

私はいくつかの基本ビューを開発し、開発サイトで作成して、それらを本番サイトに転送しました。その週の後半にPHPスクリプトを変更したところ、ユーザー 'local-web-user' @ 'localhost'のアクセスが拒否されるという突然のエラーがすべて発生しました。データソースオブジェクトは変更されていなかったため、MySQLのデータベースユーザーに集中し、その間誰かが私のWebサイトをハッキングしたのではないかと心配しました。幸い、サイトの残りの部分は無害のように見えました。

その後、その見解が犯人であることが判明しました。オブジェクトの転送は、ローカルWebサイトのユーザーとは別の(そしてリモート:admin @ ip-address)ユーザーを使用して行われます。したがって、ビューは定義者として 'admin' @ 'ip-address'を使用して作成されました。ビュー作成のセキュリティのデフォルトは

SQL SECURITY DEFINER

local-web-userがビューを使用しようとすると、テーブルを使用するための定義者の権限が不足していることに遭遇します。セキュリティが次のように変更された場合:

SQL SECURITY INVOKER

問題は解決されました。実際の問題は、エラーメッセージに基づいて予想されたものとはまったく異なりました。


1
これも私の問題の原因となった-「定義者」が欠落しているビュー。これがあなたに起こっていることであるかどうかを確認する1つの簡単な方法は、同じテーブルまたはビューをrootとしてクエリを試すことです-そうすると、エラーメッセージがはるかに説明的な「ERROR 1449(HY000):The user specified as定義者が存在しません。」
Joshua Davies

3

それは違いです:

CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';

そして

CREATE USER 'bill'@'localhost' IDENTIFIED BY 'passpass';

確認してください:

mysql> select user,host from mysql.user;
+---------------+----------------------------+
| user          | host                       |
+---------------+----------------------------+
| bill          | %                          | <=== created by first
| root          | 127.0.0.1                  |
| root          | ::1                        |
| root          | localhost                  |
| bill          | localhost                  | <=== created by second
+---------------+----------------------------+

コマンド

mysql -u bill -p

'bill' @ '%'ではなく、 'bill' @ 'localhost'に暗黙的にアクセスします。

「bill」@「localhost」には権限がありません

エラーが発生します:

ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)

問題を解決する:

CREATE USER 'bill'@'localhost' IDENTIFIED BY 'passpass';

grant all privileges on . to 'bill'@'localhost' with grant option;

grantステートメントがエラーを返しました。私はそのようにデータベースを指定する必要がありました:newdb。*のすべての特権を...に付与します
LeBird

3

これは、パスワードに@、$などの特殊文字が含まれている場合にも発生します。この状況を回避するには、パスワードを単一引用符で囲みます。

$ mysql -usomeuser -p's0mep@$$w0Rd'

または、入力中にパスワードを使用しないでください。空白のままにして、端末からの要求に応じて入力します。これが推奨される方法です。

$ mysql -usomeuser -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 191
Server version: 5.5.46-0ubuntu0.14.04.2 (Ubuntu)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

3
これは確かに問題になる可能性があります(私にとっては)。私のアカウントのすべての私のパスワードはを使用して生成されpwgenます。今日、私はMySQLデータベースとそのユーザーのために新しいものを生成しました。残念ながら、パスワードにはバックスラッシュ「\」が含まれていましたが、これはエラーの原因として特定できませんでした(私はそれについてさえ考えていませんでした)。そこで、何時間も解決策を探しました。絶望的にパスワードを「123」に設定した後、最終的にログインが機能しました。…MySQLは、たとえば「daiy4ha4in7chooshuiphie \ Th * aew」などのパスワードの使用に関する警告を表示しないため、一部の特殊文字が問題を引き起こす可能性があることをユーザーは認識しておく必要があります。
Arvid

1
まだ表示されていない場合は、これを回答として投稿しようとしていましたが、リストのかなり下にあるため、気づくことができませんでした(+1に上げています)
Assimilater

3

私にとって、この問題はMySQL 5.7.2の新機能が原因でした。フィールドが空の場合、userエントリは無視されpluginます。

たとえばmysql_native_password、それらを再度有効にするには、次のように設定します。

UPDATE user SET plugin='mysql_native_password' WHERE user='foo';
FLUSH PRIVILEGES;

MySQL 5.7.2のリリースノートの「認証に関する注意事項」を参照してください。

何らかの理由で(おそらく4.1より前のパスワードハッシュが削除されたためか)、mysql_upgradeスクリプトはデフォルトのプラグイン値を設定しませんでした。

で次の警告メッセージに気づいたことがわかりました/var/log/mysql/error.log

[警告]ユーザーエントリ 'foo' @ '%'に空のプラグイン値があります。ユーザーは無視され、このユーザーでログインすることはできなくなります。

私はこの答えをここに投稿して、誰かがこれに私と同じとんでもない時間を費やさないようにしています。


2

他の誰かがこれが役立つと思うかどうかはわかりませんが、同じエラーが発生し、匿名ユーザーを探し回っていましたが、何もありませんでした。問題は、ユーザーアカウントが「SSLを必要とする」に設定されたことになりました-これは、PHPMyAdminでユーザーアカウントに移動し、ユーザーの[権限の編集]をクリックして見つけました。このオプションをオフにするとすぐに、すべてが期待どおりに機能しました。


2

デバッグの要約

  • タイプミスエラーを確認してください:ユーザー名またはパスワード。
  • ホスト名を確認して、mysql.userテーブルのホスト名と比較します。
  • ユーザーが存在するかどうかを確認します。
  • ホストにIPアドレスまたはホスト名が含まれているかどうかを確認します。

この問題が作業中に複数回発生した可能性が高いです。この問題は、ユーザー名またはパスワードを誤って入力したことが原因でほとんどの場合発生しました。これは理由の1つですが、この問題が発生する可能性は他にもたくさんあります。時々、それは非常によく似ていますが、深く掘り下げると、このエラーの原因となっている複数の要因に気付くでしょう。この投稿では、一般的な理由のほとんどについて詳しく説明し、この問題を解決するための回避策を示します。

考えられる理由:

  • ケース1:タイプミス:ユーザー名またはパスワード。

これがこのエラーの最も一般的な理由です。ユーザー名またはパスワードを間違って入力した場合、確かにこのエラーが発生します。

解決:

このタイプのエラーの解決策は非常に簡単です。正しいユーザー名とパスワードを入力してください。このエラーは解決されます。パスワードを忘れた場合は、ユーザー名/パスワードをリセットできます。admin / rootアカウントのパスワードを忘れた場合、rootパスワードをリセット/再取得するには多くの方法があります。ルートパスワードを忘れた場合に備えて、ルートパスワードをリセットする方法について別の投稿を公開します。

  • ケース2:間違ったホストからのアクセス。

MySQLは、セキュリティ機能としてユーザーアクセスのホストベースの制限を提供します。実稼働環境では、以前はアクセス要求をアプリケーションサーバーにのみ制限していました。この機能は、多くの生産シナリオで非常に役立ちます。

解決:

このタイプの問題が発生した場合は、最初にmysql.userテーブルをチェックして、ホストが許可されているかどうかを確認してください。定義されていない場合は、mysql.userテーブルの新しいレコードを更新または挿入できます。一般に、リモートマシンからrootユーザーとしてアクセスすることは無効になっており、セキュリティ上の理由から、これはベストプラクティスではありません。複数のマシンからサーバーにアクセスする必要がある場合は、それらのマシンにのみアクセスを許可してください。ワイルドカード(%)を使用せず、ユニバーサルアクセスを提供することをお勧めします。mysql.userテーブルを更新してみましょう。これで、demouserは任意のホストからMySQLサーバーにアクセスできます。

  • ケース3:ユーザーがサーバーに存在しない。

このタイプのエラーは、アクセスしようとしているユーザーがMySQLサーバーに存在しない場合に発生します。

ソリューション:

このタイプの問題に直面した場合は、ユーザーがmysql.userテーブルに存在するかどうかを確認してください。レコードが存在しない場合、ユーザーはアクセスできません。そのユーザーがアクセスする必要がある場合は、そのユーザー名で新しいユーザーを作成します。

  • ケース4:数値ベースのホストと名前ベースのホストの混在。

重要なポイント

  • ユーザーホストを定義するときにワイルドカードを使用することはお勧めできません。正確なホスト名を使用するようにしてください。

  • リモートマシンからのrootログインを無効にします。

  • プロキシユーザーの概念を使用します。

このトピックに関連する他の概念はほとんどなく、これらのトピックの詳細を理解することは、この記事の非常に異なる範囲です。次の記事では、次の関連トピックを取り上げます。

  • MySQLサーバーのrootパスワードを忘れた場合の対処方法。
  • MySQLアクセス権限の問題とユーザー関連のテーブル。
  • MySQLのセキュリティ機能とベストプラクティス。

この投稿が、MySQLでのユーザーのMySQLエラーコード1045アクセス拒否を修正するのに役立つことを願っています。


2

mysqlでdebian-sys-maintユーザーも削除することで、これ以上の損害を与えていないことを願っています

mysqlデーモンを通常の方法で実行します。以下に示すようにmysqlクライアントを起動します

mysql -u debian-sys-maint -p

別の端末でcatは、ファイル/etc/mysql/debian.cnf。そのファイルにはパスワードが含まれています。プロンプトが表示されたら、そのパスワードを貼り付けます。

http://ubuntuforums.org/showthread.php?t=1836919


2

表面的にはエッジケースのように見えるさらに別のケースを発見しました。ルートとしてSELECT INTO .. OUTFILEを使用してファイルシステムにエクスポートできますが、通常のユーザーとしてはエクスポートできません。これはアクセス許可の問題かもしれませんが、私はそれを調べましたが、特に明白なものは何もありません。問題のデータベースに対するすべての権限を持つ通常のユーザーとしてクエリを実行すると、アクセス拒否のエラーが返され、このトピックに移動しました。古いプロジェクトでSELECT INTO…OUTFILEを正常に使用したことの筆記録を見つけたとき、rootとしてログインしていることに気付きました。案の定、ルートとしてログインすると、クエリは期待どおりに実行されました。


1

更新: v8.0.15(おそらくこのバージョン)では、このPASSWORD()機能は動作しません。

必ず:

  1. 最初にMySQLを停止したことを確認してください。
  2. 特権バイパスを使用してサーバーをセーフモードで実行します。 sudo mysqld_safe --skip-grant-tables
  3. ログインする: mysql -u root
  4. mysql> UPDATE mysql.user SET authentication_string=null WHERE User='root';
  5. mysql> FLUSH PRIVILEGES;
  6. mysql> exit;
  7. 再度ログイン: mysql -u root
  8. mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd';

0

を実行するとmysql -u bill -p、デフォルトで存在するlocalhost127.0.0.1であり、/etc/hostsファイル内にあるため、IPに解決されます127.0.0.1 localhost。したがって、mysqlはでbill@localhost付与されていないものとして解釈しますbill@'%'。これがrootselect host, user from mysql.user;クエリの結果にユーザーの2つの異なるレコードがある理由です。

この問題を処理するには2つの方法があります。

1つは、逆解決されないIPを指定することです。 /etc/hostsログインしようとしたときにファイルことです。たとえば、サーバーのIPはです10.0.0.2。コマンドを実行すると、mysql -u bill -p -h 10.0.0.2ログインできるようになります。入力select user();すると、取得されbill@10.0.0.2ます。もちろん、ドメイン名は/etc/hostsファイル内でこのIPに解決されるべきではありません。

次に、この特定のドメイン名へのアクセスを許可する必要があります。についてはbill@localhost、コマンドを呼び出す必要がありますgrant all privileges on *.* to bill@localhost identified by 'billpass';。この場合、コマンドでログインできますmysql -u bill -p。ログインすると、select user();コマンドはを返しますbill@localhost

ただし、これは、同じホストでmysqlサーバーにログインしようとする場合のみです。リモートホストからは、mysqlは正常に動作し、 '%'はログインを許可します。


0

古いバグのあるユーザーの「bill」エントリを削除することでこれを解決し(これは重要な部分です:mysql.usermysql.dbの両方から)、以前と同じ悲しいユーザーを作成しました:

FLUSH PRIVILEGES;
CREATE USER bill@localhost IDENTIFIED BY 'passpass';
grant all privileges on *.* to bill@localhost with grant option;
FLUSH PRIVILEGES;

動作し、ユーザーは接続しています。ここからいくつかの特権を削除します:)


0

同じエラーが発生しました。機能していなかった設定は次のとおりです。

define("HOSTNAME", "localhost");
define("HOSTUSER", "van");
define("HOSTPASS", "helsing");
define("DBNAME", "crossbow");
$connection = mysqli_connect(HOSTNAME, HOSTUSER, HOSTPASS);

以下の編集された設定は、それを機能させるものです。違いに気づきましたか?

define('HOSTNAME', 'localhost');
define('HOSTUSER', 'van');
define('HOSTPASS', 'helsing');
define('DBNAME', 'crossbow');
$connection = mysqli_connect(HOSTNAME, HOSTUSER, HOSTPASS);

違いは二重引用符です。これらはJavaとは対照的にPHPでは非常に重要であるように思われ、文字のエスケープ、URLの設定、および関数へのパラメーターの受け渡しに関しては影響があります。それらはよりきれいです(私は知っています)が、可能な限り常に単一引用符を使用し、必要に応じて二重引用符をそれらの中にネストできます。

このエラーは、Windows環境ではなくLinuxボックスでアプリケーションをテストしたときに発生しました。


0

パスワードに「;」が含まれているため、同様の問題が発生しました。パスワードを最初に作成するときにcharがパスワードを破る。あなたが助けることができるならこれに注意してください。


0

これは非常に少数の人々に当てはまるかもしれませんが、ここに行きます。!パスワードに感嘆符を使用しないでください。

MariaDBを使用して上記のエラーを発生させました。数字と文字だけに簡略化したところ、うまくいきました。以下のような他の文字@$作業罰金-私は同じインスタンス上の別のユーザーにこれらの文字を使用していました。

このアドレスでの5番目の応答は、私を直してくれました。


0

Windowsでの解決方法は次のとおりです。

エラー1045(28000):ユーザー 'root' @ 'localhost'のアクセスが拒否されました(パスワードを使用:NO)

  1. コントロールパネルからmysqlをアンインストールします。
  2. 以下からのMySQLフォルダを削除C:\Program Files,C:\Program Files (x86)し、C:\ProgramData
  3. mysqlをインストールする

他のすべての答えを試しましたが、最終的にこれを試すことにしましたが、うまくいきました!
jasonoriordan

0

これは、MySQLがWindowsなどの大文字と小文字を区別しないOSで実行されている場合にも発生することがあります。

たとえば、これらの資格情報を使用してデータベースに接続しようとすると失敗することがわかりました。

mysql> grant select on databaseV105.* to 'specialuser' identified by 's3curepa5wrd';

$ mysql -specialuser' -p's3curepa5wrd' -h10.61.130.89 databaseV105

エラー1045(28000):ユーザー 'specialuser'@'10.0.1.113'のアクセスが拒否されました(パスワードを使用:YES)

しかし、これは成功しました:

mysql> grant select on databasev105.* to 'specialuser' identified by 's3curepa5wrd';

$ mysql -specialuser' -h10.300.300.400 databaseV105 -p

パスワードを入力する:



0

今日!のソリューション:

MySQLエラー1045(28000):ユーザー 'user' @ 'localhost'のアクセスが拒否されました(パスワードを使用:YES);

Wampserver 3.2.0の新しいインストールまたはアップグレード

おそらくxamp使用してmariaDBデフォルトにすることもあります。

WampサーバーにはmariaDBmysql が付属しており、mariaDBデフォルトで3306のポートに、mysqlが3307のポートに、時には3308のポートにインストールされます。

に接続してmysqlください!

インストール時にmariaDBor を使用するように求められますがMySql、mariaDBはデフォルトでチェックされており、変更したり、mysqlオプションをチェックしてインストールしたりすることはできません。

インストールが完了するとmariaDB、デフォルトポート3306とmysql別のポート3307または3308の両方で実行されます。

wampserver下隅にあるはずのアイコンを右クリックし、ツールに移動して、正しい実行mysqlポートを確認します。

そして、それをfolowngと同じデータベース接続に含めます。

$host = 'localhost';
$db   = 'test';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';
$port = '3308';//Port

$dsn = "mysql:host=$host;dbname=$db;port=$port;charset=$charset"; //Add in connection
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];
try {
     $pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
     throw new \PDOException($e->getMessage(), (int)$e->getCode());
}

Note : 私はpdoを使用しています。

詳しくはこちらをご覧くださいhttps//sourceforge.net/projects/wampserver/


強調のためにバックティックを使用しないでください。これらはコードにのみ使用してください。MySQLやWampserverなどの単語はコードではありません。
ダーマン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.