493

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

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

mysql -u root -p

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

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

ユーザー請求書にすべての権限を付与:

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

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

mysql -u bill -p

正しいパスワードを入力したところ、次のエラーが発生しました。

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

4

40 に答える 40

473

おそらく、匿名ユーザー''@'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 -ubil -ppass --socket=/tmp/mysql-5.5.sock
    MySQL モニターへようこそ (...)

    mysql> SELECT ユーザー、ホスト FROM mysql.user;
    +--------+----------+
    | | ユーザー | ホスト |
    +--------+----------+
    | | 法案 | % |
    | | ルート | 127.0.0.1 |
    | | ルート | ::1 |
    | | ルート | ローカルホスト |
    +--------+----------+
    4 行セット (0.00 秒)

    mysql> SELECT USER(), CURRENT_USER();
    +----------------+----------------+
    | | ユーザー() | CURRENT_USER() |
    +----------------+----------------+
    | | bill@localhost | 請求書@% |
    +----------------+----------------+
    セットで 1 行 (0.02 秒)

    mysql> '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';
    クエリ OK、影響を受ける行は 0 (0.00 秒)

    mysql>さようなら

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

編集 3

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

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

    mysql> SELECT USER(), CURRENT_USER();
    +----------------+----------------+
    | | ユーザー() | CURRENT_USER() |
    +----------------+----------------+
    | | bill@localhost | @localhost |
    +----------------+----------------+
    セットで 1 行 (0.01 秒)

結論 1、編集 1 から:'bill'@'%'ソケット経由で認証できます。

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

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

于 2012-06-26T22:36:56.007 に答える
160

試す:

~$ mysql -u root -p
Enter Password:

mysql> grant all privileges on *.* to bill@localhost identified by 'pass' with grant option;
于 2012-10-25T20:17:57.827 に答える
96

あなたが走ったとき

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>

OK、匿名ユーザーとしてログインするのを見てください:

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

于 2012-06-26T17:40:32.133 に答える
36

これに超遅い

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


mysql -u root -p

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


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

于 2016-10-03T23:46:03.643 に答える
22

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

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

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

TCP/IP を使用して mysql コマンド ライン クライアントに接続することもできます。これは、既に付与されている特権 (たとえば、実行mysql -u root -p -h 192.168.1.123またはボックスが持つローカル IP アドレス) と一致するようにするためです。

于 2012-06-26T17:39:13.770 に答える
18

大きな頭痛の種から身を守ってください... あなたの問題は、パスワードの周りの引用符がないことかもしれません. 少なくともそれは私を3時間迂回させた私の場合でした.

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

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

「典型的なユーザー オプション ファイルは次のとおりです」を検索して、そこに記載されている例を参照してください。頑張ってください。誰かの時間を節約したいと思っています。

于 2014-07-25T17:14:07.667 に答える
13

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

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

于 2012-09-24T15:58:05.290 に答える
5

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

bind-address = 127.0.0.1
于 2012-04-25T09:37:17.453 に答える
5

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

$ 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>
于 2016-07-08T06:44:42.157 に答える
5

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

于 2016-03-10T02:53:27.523 に答える
4

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

mysql_native_passwordそれらを再度有効にするには、eg に設定します。

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

«Authentication Notes» の下にあるMySQL 5.7.2 のリリース ノートを参照してください。

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

に次の警告メッセージが表示されていることに気付きました/var/log/mysql/error.log

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

この回答をここに投稿して、誰かが私と同じようにばかげた時間をこれに費やすのを防ぐことができます。

于 2016-09-18T23:43:10.213 に答える
2

現在!ソリューション:

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

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

おそらくデフォルトでxamp使用するのが良いでしょう。mariaDB

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

に接続mysql

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

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

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

そして、次のようにデータベース接続に含めます:

$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/

于 2020-01-30T14:16:58.717 に答える
2

私にとって、ルートにはデフォルトのパスワードがありました

を使用してパスワードを変更しましたが、ALTER USER 'root'@'localhost' IDENTIFIED BY 'new Password';機能しました

于 2020-12-10T21:28:32.333 に答える
2

パスワードに「;」が含まれているため、同様の問題が発生しました。最初の瞬間にパスワードを作成すると、char がパスワードを壊します。役立つ場合は、これに注意してください。

于 2019-09-16T10:58:15.390 に答える
0

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

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

動作しました。ユーザーは接続しています。今、私はそれからいくつかの特権を取り除きます:)

于 2014-05-03T04:06:44.660 に答える
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 ボックスでアプリケーションをテストしたときに発生しました。

于 2018-08-11T00:17:41.270 に答える
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

パスワードを入力する:

于 2019-07-04T14:14:28.120 に答える
-1

MySQLアカウント名は、ユーザー名とホスト名で構成されます。ホスト名の「localhost」という名前は、ローカルホストも示します。ホスト名またはIPアドレスの値にワイルドカード文字「%」と「_」を使用できます。これらは、LIKE演算子を使用して実行されるパターンマッチング操作の場合と同じ意味を持ちます。たとえば、「%」のホスト値は任意のホスト名と一致しますが、「%。mysql.com」の値はmysql.comドメイン内の任意のホストと一致します。'192.168.1。%'は、192.168.1クラスCネットワーク内の任意のホストと一致します。

上記は単なる紹介でした:

実際には両方のユーザー'bill'@'localhost''bill'@'%'異なるMySQLアカウントであるため、両方ともパスワードなどの独自の認証の詳細を使用する必要があります。

詳細については、http://dev.mysql.com/doc/refman//5.5/en/account-names.htmlを参照してください。

于 2012-06-27T14:15:43.133 に答える
-1

また、間違ったハッシュでパスワードを生成する古いバージョンの MySQL UI (SQLYoug など) を使用している場合にも、この問題が発生する可能性があります。

SQL スクリプトを使用してユーザーを作成すると、問題が解決します。

于 2014-05-05T15:34:34.953 に答える
-1

パーセント記号はすべての IP を意味するため、 localhost は不要です ... localhost を使用した 2 番目のレコードは必要ありません。

実際には、'localhost' は mysql で特別です。これは、TCP/IP ソケットではなく、UNIX ソケット (または Windows の名前付きパイプ) を介した接続を意味します。% をホストとして使用すると、'localhost' が含まれません

MySQL ユーザー アカウントには、ユーザー名とホスト名の 2 つのコンポーネントがあります。ユーザー名はユーザーを識別し、ホスト名はユーザーが接続できるホストを指定します。ユーザー名とホスト名を組み合わせて、ユーザー アカウントを作成します。

'<user_name>'@'<host_name>' ホスト名に特定の IP アドレスまたはアドレス範囲を指定するか、パーセント文字 (「%」) を使用して、そのユーザーが任意のホストからログインできるようにすることができます。

ユーザー アカウントは、ユーザー名とホスト名の両方で定義されることに注意してください。たとえば、'root'@'%'は とは異なるユーザー アカウントです'root'@'localhost'

于 2016-08-26T17:08:31.450 に答える
-1

localhost ポストを使用している他の SQL インスタンスが実行されていないことを確認してください。私たちの場合、別のインスタンスがログインと競合する localhost で実行されていました。オフにすると、この問題は解決しました。

于 2014-02-11T13:58:54.393 に答える