最初に私が私が多くの提案された質問をしてきたことを言及させてくださいそして関連性のある答えを見つけませんでした。これが私がしていることです。
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)
あなたはおそらく匿名ユーザー''@'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
を指定しましたが、匿名ユーザーとしてアクセスを許可されています。これは上記の「ソート規則」のためです。ほとんどのデフォルトのインストールでは、 パスワードなしの匿名ユーザーが存在します (セキュリティで保護された/削除されるべきです)。
試してください:
~$ mysql -u root -p
Enter Password:
mysql> grant all privileges on *.* to bill@localhost identified by 'pass' with grant option;
走ったとき
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を明示的に呼び出すことを忘れないでください。
パスワードを忘れた場合、またはパスワードを変更したい場合は、次の手順に従ってください。
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警告:06:フラッシュ
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
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アドレスのどちらかを実行してください。
私の場合の関連する問題は、を使用して接続しようとしていました:
mysql -u mike -p mypass
空白 ISは明らかに-u#uname#の間に使用できますが、NOTは_pと#password#の間に使用できます
そのために必要なもの:
mysql -u mike -pmypass
それ以外の場合は、-p mypass mysqlの間に空白を入れて、dbの名前として 'mypass'を使用します。
あなた自身の主な頭痛から救う...あなたの問題はあなたがパスワードのまわりの引用符を逃しているということかもしれません。少なくともそれが3時間私を迂回させた私の場合でした。
[client]
user = myusername
password = "mypassword" # <----------------------- VERY IMPORTANT (quotes)
Host = localhost
http://dev.mysql.com/doc/refman/5.7/en/option-files.html
「これは一般的なユーザーオプションファイルです:」を検索し、そこに記載されている例を参照してください。頑張ってください、そして私はいつか他の人を救うことを望みます。
これに超遅刻
私はこれらすべての他の答えを試してみて、mysql -u root -p
の多くの異なるバージョンを走らせました
mysql -u root -p
パスワードを[ENTER]
と押すだけです。
それがうまくいったことを一度したら。これが誰かに役立つことを願っています。
解決策は、匿名(Any)ユーザーを削除することです。
私はまた、他の誰かによるサーバーの設定についても同じ問題に直面しました。私は通常MySQLのインストール時に匿名ユーザーを作成することを選択しないので、これに気づいていませんでした。最初は "root"ユーザーとしてログインし、 "普通の"ユーザー(ユーザー名をプレフィックスとしてdbsのみに特権を持つユーザー)を作成し、次にログアウトしてから最初の一般ユーザーを確認しました。ログインできませんでした。phpMyAdmin経由でもShell経由でもありません。結局のところ、犯人はこの "Any"ユーザーです。
私自身が見つけた最良の解決策はです。
私のユーザーは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';
わかりませんが、おそらくmysqlのインストールディレクトリ内のmy.cnfファイルが原因です。
bind-address = 127.0.0.1
ちょうど私が同じエラーを受けた異常な状況をあなたに知らせたいと思いました。おそらくこれは将来の誰かに役立つでしょう。
開発サイトで作成したいくつかの基本ビューを開発し、それらを本番サイトに転送しました。その週の後半に私はPHPスクリプトを変更しました、そして突然のエラーのすべてはAccessがユーザー 'local-web-user' @ 'localhost'に対して拒否されたことを思いつきました。データソースオブジェクトは変更されていなかったので、私はMySQLのデータベースユーザに集中し、その間に誰かが私のウェブサイトをハッキングしたのではないかと心配しました。幸いなことに、このサイトの他の部分は無傷だったようです。
その後、その見解が原因であることが判明しました。私たちのオブジェクト転送は、ローカルウェブサイトのユーザーとは別の(そしてリモートの:admin @ ip-address)ユーザーを使って行われます。そのため、ビューは定義者として 'admin' @ 'ip-address'で作成されました。ビュー作成のSECURITYデフォルトは
SQL SECURITY DEFINER
Local-web-userがそのビューを使用しようとすると、定義者の特権を欠いているためにテーブルを使用できなくなります。セキュリティが変更されたら
SQL SECURITY INVOKER
問題は解決しました。実際の問題は、エラーメッセージに基づいて予想されたものとはまったく異なります。
それは違います:
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;
これは、パスワードに@、$などの特殊文字が含まれている場合にも発生します。
$ 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>
私はやや似たような問題を抱えていました。MySqlに最初にアクセスしようとしたときに、rootとして、アクセスが拒否されました。 Sudoを使うのを忘れたのですが…
それで、もしあなたがrootでの最初の試みに失敗したら、試してみてください。
Sudo mysql -u root -p
それからパスワードを入力してください、これはうまくいくはずです。
デバッグの概要
あなたはあなたの仕事でこの問題に何度も遭遇した可能性が高いです。この問題は、ほとんどの場合、ユーザー名またはパスワードを誤って入力したために発生しました。これは理由の1つですが、あなたがこの問題を得るかもしれない他の多くの可能性があります。時々、それは非常に似ているように見えます、しかしあなたがより深く掘ると、あなたはこのエラーに寄与している複数の要因に気づくでしょう。この記事では、一般的な理由のほとんどについて詳細に説明し、この問題を解決するために回避します。
考えられる理由:
これがこのエラーの最も一般的な理由です。ユーザー名またはパスワードを誤って入力した場合は、必ずこのエラーが発生します。
解決策:
この種のエラーに対する解決策は非常に簡単です。正しいユーザー名とパスワードを入力するだけです。このエラーは解決されます。パスワードを忘れた場合は、ユーザー名/パスワードをリセットできます。 admin/rootアカウントのパスワードを忘れた場合は、rootパスワードをリセット/再取得する方法が多数あります。 rootのパスワードを忘れた場合に備えて、rootのパスワードをリセットする方法についての別の投稿を掲載します。
MySQLはセキュリティ機能としてユーザーアクセスにホストベースの制限を提供します。本番環境では、アクセス要求をアプリケーションサーバーだけに制限していました。この機能は多くの生産シナリオで非常に役立ちます。
解決策:
この種の問題に直面したときは、まずmysql.userテーブルをチェックして、あなたのホストが許可されているかどうかを確認してください。通常、リモートマシンからのrootユーザとしてのアクセスは無効になっており、セキュリティ上の理由からベストプラクティスではありません。複数のマシンからサーバにアクセスする必要がある場合は、それらのマシンにのみアクセスできます。ワイルドカード(%)を使わない方がよく、ユニバーサルアクセスが可能です。 mysql.userテーブルを更新してみましょう。これで、デモユーザは任意のホストからMySQLサーバにアクセスできます。
このタイプのエラーは、アクセスしようとしているユーザーがMySQLサーバーに存在しない場合に発生します。
ソリューション:
この種の問題に直面したときは、ユーザーがmysql.userテーブルに存在するかどうかを確認してください。レコードが存在しない場合、ユーザーはアクセスできません。そのユーザーがアクセスする必要がある場合は、そのユーザー名で新しいユーザーを作成してください。
重要なポイント
ユーザーHostの定義中にワイルドカードを使用することはお勧めできません。正確なホスト名を使用するようにしてください。
リモートマシンからのrootログインを無効にします。
プロキシユーザーの概念を使用してください。
このトピックに関連する概念は他にもいくつかありますが、それらのトピックの詳細を理解することは、この記事の範囲が大きく異なるためです。今後の記事では、以下の関連トピックについて説明します。
この投稿がMySQLのユーザーのために拒否されたMySQLエラーコード1045アクセスを修正するのに役立つことを願っています。
私にとっては、この問題は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' @ '%'には空のプラグイン値があります。ユーザは無視され、誰もこのユーザとログインできなくなります。
私はこの答えをここに投稿して、多分私がしたのと同じばかげた時間を使うことから誰かを救う。
他の誰かがこれが役に立つと思うかどうかわからないが、私は同じエラーに遭遇し、匿名ユーザーを探していた...そして誰もいなかった。問題は、ユーザーアカウントが[SSLを必要とする]に設定されていたことです。これはPHPMyAdminでユーザーアカウントに移動し、ユーザーの[権限の編集]をクリックすることで確認できます。このオプションをオフにするとすぐに、すべて正常に機能しました。
私は表面に現れるもう一つのケースをエッジケースとして発見しました。 SELECT INTO .. OUTFILEを介してrootとしてファイルシステムにエクスポートできますが、通常のユーザーとしてはエクスポートできません。これは許可の問題かもしれませんが、私はそれを見ました、そして特に明白な何も見ません。問題となっているデータベースに対するすべての権限を持つ通常のユーザーとしてクエリを実行すると、アクセス拒否エラーが返され、このトピックにつながります。古いプロジェクトでSELECT INTO…OUTFILEの使用が成功したことの筆記録を見つけたとき、私はrootとしてログインしたことに気づきました。案の定、私がrootとしてログインしたとき、クエリは期待通りに走りました。
Mysqlでdebian-sys-maintユーザーを削除してもこれ以上被害を受けていないことを願います
Mysqlデーモンを通常の方法で実行してください。以下のようにmysqlクライアントを起動してください。
mysql -u debian-sys-maint -p
別の端末では、cat
ファイル/etc/mysql/debian.cnf
。そのファイルにはパスワードが含まれています。パスワードを要求されたら貼り付けます。
ウィンドウ上で、解決方法エラー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
これはごく少数の人々に当てはまるかもしれませんが、ここに行きます。パスワードには、あいさつ文(!)を使わないでください。 MariaDBを使用して上記のエラーが発生しました。私はそれを数字と文字だけに単純化するとうまくいきました。 @や$などの他の文字は問題なく動作します - 同じインスタンスの異なるユーザーでそれらの文字を使用しました。この address にある5番目の応答は私を修正に導きました。
OS:ウィンドウズ
私のエラーメッセージは「MySQLエラー1045(28000):ユーザー 'root' @ 'localhost'のアクセスが拒否されました(パスワードを使用:YES)」
私の理由はadministrator permission
でcmdを開かないことです
だから私の解決策:administrator permission
でcmdを開いて、それが動作します。
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は予想どおりに動作し、「%」はログインを許可します。
同じエラーが発生しました。うまくいかなかった設定は次のとおりです。
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ボックスでアプリケーションをテストしたときに発生しました。
これは、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
パスワードを入力する:
私はこれを古いバグのあるユーザーの '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;
ユーザーが接続しています。今から私はそれからいくつかの優位性を削除します:)