4

リモートユーザーに特権を付与するコマンドが失敗しているため、私とチームメンバーは困惑していますが、エラーはありません。新しいユーザーはCREATEUSERを使用してmysql.userに正常に追加されましたが、GRANTPRIVILEGESの後にFLUSHPRIVILEGESが続く場合はgrantsテーブルに影響しません。これらのコマンドは両方とも、「クエリOK」と表示されるはずです。0行が影響を受けました。ただし、SHOW GRANTSは新しい特権を表示せず、指定されたリモートIPからそのユーザー名でログインすることもできません。誰かが次の動作を説明できますか?

mysql> SELECT CURRENT_USER();     ///I'm definitely in as root user
+----------------+
| CURRENT_USER() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'myNewUser'@'remoteIP';  //grant to existing user
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW GRANTS;

 | Grants for root@localhost                                                                                                                   

| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD           '*////TakenOut///' WITH GRANT OPTION |
 | GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION                                                                              
2 rows in set (0.00 sec)

'myNewUser'の権限を持つ3行目が必要です。

4

1 に答える 1

10

SHOW GRANTSステートメントは、現在のユーザーの許可を示しています。あなたの場合、root@localhostの場合。したがって、の権限を持つ3番目の行が表示されることを期待するべきではありませんmyNewUser

むしろ、mysql.userテーブルをクエリします...

SELECT * FROM mysql.user WHERE User = 'myNewUser'

パスワードがに設定されていることを確認します'myNewUser'@'remoteip'。(MySQLは、ユーザー名とホストの組み合わせによって「ユーザー」を識別します。ユーザー'myNewUser'@'thisip'はとは異なるユーザーです'myNewUser'@'thatip'。)


また、MySQLmy.cnfファイルに次の設定があります。

# Disable DNS Lookup (use IP addresses only)
skip-name-resolve

そのため、ホスト名ではなくIPアドレスを使用します。(これにより、DNSがIPアドレスからDNS逆引き参照を実行してホスト名を取得できない場合に発生する接続の問題を回避できます。)

http://dev.mysql.com/doc/refman/5.1/en/host-cache.html

結論として、MySQLはIPアドレスの「逆引き参照」を実行してホスト名を取得します。特定のIPアドレスのホスト名を取得できない場合、IPアドレスからの接続は失敗します。

于 2012-08-24T20:29:32.307 に答える