web-dev-qa-db-ja.com

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

最初に私が私が多くの提案された質問をしてきたことを言及させてくださいそして関連性のある答えを見つけませんでした。これが私がしていることです。

Amazon EC2インスタンスに接続しています。私はこのコマンドでMySQLのrootでログインすることができます:

mysql -u root -p

それから私はHost%で新しいユーザー請求書を作成しました 

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)

354
Ali

あなたはおそらく匿名ユーザー''@'localhost'または''@'127.0.0.1'を持っています。

マニュアルに従って

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

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

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

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

'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ユーザー、ホスト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 | ON | 
 + ----------------- + ------- + 
セット内の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'; 
クエリOK、影響を受けた0行(0.00秒)
 
 mysql> Bye 
 
 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から1:ソケットを介して'bill'@'%'として認証できます。

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

結論3、編集3から:-ubillを指定しましたが、匿名ユーザーとしてアクセスを許可されています。これは上記の「ソート規則」のためです。ほとんどのデフォルトのインストールでは、 パスワードなしの匿名ユーザーが存在します (セキュリティで保護された/削除されるべきです)。

394
RandomSeed

試してください:

~$ mysql -u root -p
Enter Password:

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

走ったとき 

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 [email protected]
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を明示的に呼び出すことを忘れないでください。

64
RolandoMySQLDBA

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

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を使用 
テーブル名とカラム名の補完のためのテーブル情報の読み取りこの機能をオフにすると、-Aを使って起動を早くすることができます。

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

mysql> updateユーザーset password = password( 'root123')ここで、user = 'root'; 
クエリOK、影響を受けた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
14
Li Yingjun

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

しかし、あなたが与えた助成金、'bill'@'%'はTCP/IP接続に不思議なことに十分一致します。

ローカルのunixソケットへのアクセスを許可したい場合は、 'bill' @ 'localhost'に特権を付与する必要があります。

TCP/IPを使ってmysqlコマンドラインクライアントと接続することもできます。 mysql -u root -p -h 192.168.1.123またはあなたの箱が持っているローカルIPアドレスのどちらかを実行してください。

14
nos

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

mysql -u mike -p mypass

空白 ISは明らかに-u#uname#の間に使用できますが、NOTは_pと#password#の間に使用できます

そのために必要なもの:

mysql -u mike -pmypass

それ以外の場合は、-p mypass mysqlの間に空白を入れて、dbの名前として 'mypass'を使用します。

14
mstram

あなた自身の主な頭痛から救う...あなたの問題はあなたがパスワードのまわりの引用符を逃しているということかもしれません。少なくともそれが3時間私を迂回させた私の場合でした。

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

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

「これは一般的なユーザーオプションファイルです:」を検索し、そこに記載されている例を参照してください。頑張ってください、そして私はいつか他の人を救うことを望みます。

13
mimoralea

これに超遅刻

私はこれらすべての他の答えを試してみて、mysql -u root -pの多くの異なるバージョンを走らせました 


mysql -u root -p 

パスワードを[ENTER]と押すだけです。 


それがうまくいったことを一度したら。これが誰かに役立つことを願っています。 

12
garrettmac

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

私はまた、他の誰かによるサーバーの設定についても同じ問題に直面しました。私は通常MySQLのインストール時に匿名ユーザーを作成することを選択しないので、これに気づいていませんでした。最初は "root"ユーザーとしてログインし、 "普通の"ユーザー(ユーザー名をプレフィックスとしてdbsのみに特権を持つユーザー)を作成し、次にログアウトしてから最初の一般ユーザーを確認しました。ログインできませんでした。phpMyAdmin経由でもShell経由でもありません。結局のところ、犯人はこの "Any"ユーザーです。

12
fevangelou

私自身が見つけた最良の解決策はです。

私のユーザーはsonarであり、私は外部または他のマシンから私のデータベースに接続しようとしているときはいつでも私はとしてエラーを得ています 

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

また、私が別のマシンからJenkinsの仕事を通してこれを試しているので、アクセスするための私の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';
5
Abhijeet Kamble

わかりませんが、おそらくmysqlのインストールディレクトリ内のmy.cnfファイルが原因です。

bind-address = 127.0.0.1
3
Ali

ちょうど私が同じエラーを受けた異常な状況をあなたに知らせたいと思いました。おそらくこれは将来の誰かに役立つでしょう。

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

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

SQL SECURITY DEFINER

Local-web-userがそのビューを使用しようとすると、定義者の特権を欠いているためにテーブルを使用できなくなります。セキュリティが変更されたら 

SQL SECURITY INVOKER

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

3
Erik

それは違います:

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' @ 'localhost'に暗黙的にアクセスし、 'bill' @ '%'にはアクセスしない.

'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;
3
Gerd

これは、パスワードに@、$などの特殊文字が含まれている場合にも発生します。

$ 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
Pranit More

私はやや似たような問題を抱えていました。MySqlに最初にアクセスしようとしたときに、rootとして、アクセスが拒否されました。 Sudoを使うのを忘れたのですが… 

それで、もしあなたがrootでの最初の試みに失敗したら、試してみてください。 

Sudo mysql -u root -p 

それからパスワードを入力してください、これはうまくいくはずです。 

2
David Refaeli

デバッグの概要

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

あなたはあなたの仕事でこの問題に何度も遭遇した可能性が高いです。この問題は、ほとんどの場合、ユーザー名またはパスワードを誤って入力したために発生しました。これは理由の1つですが、あなたがこの問題を得るかもしれない他の多くの可能性があります。時々、それは非常に似ているように見えます、しかしあなたがより深く掘ると、あなたはこのエラーに寄与している複数の要因に気づくでしょう。この記事では、一般的な理由のほとんどについて詳細に説明し、この問題を解決するために回避します。  

考えられる理由:

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

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

解決策:  

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

  • ケース2:間違ったホストからアクセスしている。

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

解決策:

この種の問題に直面したときは、まずmysql.userテーブルをチェックして、あなたのホストが許可されているかどうかを確認してください。通常、リモートマシンからのrootユーザとしてのアクセスは無効になっており、セキュリティ上の理由からベストプラクティスではありません。複数のマシンからサーバにアクセスする必要がある場合は、それらのマシンにのみアクセスできます。ワイルドカード(%)を使わない方がよく、ユニバーサルアクセスが可能です。 mysql.userテーブルを更新してみましょう。これで、デモユーザは任意のホストからMySQLサーバにアクセスできます。

  • ケース3:ユーザーがサーバーに存在しません。

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

ソリューション:

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

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

重要なポイント

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

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

  • プロキシユーザーの概念を使用してください。

このトピックに関連する概念は他にもいくつかありますが、それらのトピックの詳細を理解することは、この記事の範囲が大きく異なるためです。今後の記事では、以下の関連トピックについて説明します。

  • MySQLサーバのrootパスワードを忘れた場合はどうすればいいですか。
  • MySQLアクセス特権の問題とユーザー関連のテーブル.
  • ベストプラクティスを備えたMySQLセキュリティ機能。

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

2
Abhijit Jagtap

私にとっては、この問題は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
maxelost

他の誰かがこれが役に立つと思うかどうかわからないが、私は同じエラーに遭遇し、匿名ユーザーを探していた...そして誰もいなかった。問題は、ユーザーアカウントが[SSLを必要とする]に設定されていたことです。これはPHPMyAdminでユーザーアカウントに移動し、ユーザーの[権限の編集]をクリックすることで確認できます。このオプションをオフにするとすぐに、すべて正常に機能しました。

2
Alan

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

2
David A. Gray

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
ysk

ウィンドウ上で、解決方法エラー1045(28000):ユーザー 'root' @ 'localhost'のアクセスが拒否されました(パスワードを使用:NO)

1) Uninstall mysql from control panel
2)Delete MySql folder from C:\Program Files,C:\Program Files (x86) and C:\ProgramData
3)Install mysql
0
Sanjay

これはごく少数の人々に当てはまるかもしれませんが、ここに行きます。パスワードには、あいさつ文(!)を使わないでください。 MariaDBを使用して上記のエラーが発生しました。私はそれを数字と文字だけに単純化するとうまくいきました。 @や$などの他の文字は問題なく動作します - 同じインスタンスの異なるユーザーでそれらの文字を使用しました。この address にある5番目の応答は私を修正に導きました。

0
Chiwda

OS:ウィンドウズ 

私のエラーメッセージは「MySQLエラー1045(28000):ユーザー 'root' @ 'localhost'のアクセスが拒否されました(パスワードを使用:YES)」

私の理由はadministrator permissionでcmdを開かないことです 

だから私の解決策:administrator permissionでcmdを開いて、それが動作します。

0
yilin

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

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

1つは、ログインしようとしたときに/etc/hostsファイルによって逆解決されないIPを指定することです。たとえば、サーバーのIPは10.0.0.2です。コマンドmysql -u bill -p -h 10.0.0.2を実行すると、ログインできるようになります。 select user();と入力すると、[email protected]を取得します。もちろん、/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
Shnkc

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

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
Raymond Wachaga

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

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

mysql>は、「s3curepa5wrd」で識別される「specialuser」にdatabaseV105。*のselectを付与します。

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

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

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

mysql>「s3curepa5wrd」で識別される「specialuser」にdatabasev105。*のselectを付与します。

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

パスワードを入力する:

0
kguest

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

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

ユーザーが接続しています。今から私はそれからいくつかの優位性を削除します:)

0
dxvargas