3

状況

ユーザー構成が乱雑なmysqlサーバーがあります。同じログインを持つ2つの異なるエントリがありますadmn

mysql> select user,host,grant_priv from mysql.user where user="admn";
+------+---------------------------+------------+
| user | host                      | grant_priv |
+------+---------------------------+------------+
| admn | 192.168.0.0/255.255.255.0 | N          |
| admn | 192.168.0.21              | Y          |
+------+---------------------------+------------+
2 rows in set (0.00 sec)

2 番目のもの ( host 192.168.0.21) だけが "grant" 特権を持っていることに注意してください。

完全を期すために、2 人のユーザーの権限を以下に示します。

mysql> show grants for 'admn'@'192.168.0.0/255.255.255.0';
+------------------------------------------------------------------------------------------------+
| Grants for admn@192.168.0.0/255.255.255.0                                                      |
+------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'admn'@'192.168.0.0/255.255.255.0' IDENTIFIED BY PASSWORD '---' |
+------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> show grants for 'admn'@'192.168.0.21';
+-----------------------------------------------------------------------------------------------------+
| Grants for admn@192.168.0.21                                                                        |
+-----------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'admn'@'192.168.0.21' IDENTIFIED BY PASSWORD '---' WITH GRANT OPTION |
+-----------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql サーバーのバージョンは次のとおりです。

mysql> select version();
+-----------------------+
| version()             |
+-----------------------+
| 5.1.63-0+squeeze1-log |
+-----------------------+
1 row in set (0.00 sec)

問題

192.168.0.21の資格情報を使用してマシンからログインするとadm、次のように識別され'admn'@'192.168.0.0/255.255.255.0'ます。

mysql> select user(), current_user();
+-------------------+--------------------------------+
| user()            | current_user()                 |
+-------------------+--------------------------------+
| admn@192.168.0.21 | admn@192.168.0.0/255.255.255.0 |
+-------------------+--------------------------------+
1 row in set (0.00 sec)

このアカウントには「許可」権限がないため、権限管理に関して行き詰まっています。

質問

どうすれば'admn'@'192.168.0.21'acount にアクセスできますか?

4

1 に答える 1

2

ワイルドカードを使用するようにサブネットを持つアカウントを変更する必要があります。つまり、に変更192.168.0.0/255.255.255.0192.168.0.%ます。

この理由は、MySQL がホストの具体性に応じて優先的にユーザーを選択するためです。その具体性は と で同じです192.168.0.21192.168.0.0/255.255.255.0、ワイルドカード バージョン (サブネット化されたバージョンと同じことを意味します!) の具体性は低くなります。

ここを参照してください:

リテラル IP アドレスの特異性は、ネットマスクの有無に影響されないため、192.168.1.13 と 192.168.1.0/255.255.255.0 は同等に特異的であると見なされます... パターン「%」は「任意のホスト」を意味し、最も特異的ではありません.

于 2013-09-06T11:09:22.863 に答える