1

私はこれを定義したMySQL5を持っています:

CREATE DATABASE foo DEFAULT CHARACTER SET = 'utf8';
GRANT ALL ON foo.* TO foo@'%' IDENTIFIED BY 'foo';
FLUSH PRIVILEGES;

ただし、user foo、pass foo、接続でアクセスする場合は拒否されます。に変更すると

GRANT ALL ON foo.* TO foo@localhost IDENTIFIED BY 'foo';

MySQLは私を受け入れます。 なぜ最初のものが機能しないのですか?AFAIK、%何にでも一致する必要があります。

更新:これが見つかりました。関連している可能性がありますhttp://forums.mysql.com/read.php?30,158830,158830

手動参照:(そこに答えは見つかりませんでした)

4

1 に答える 1

3

mysqlドキュメントから:

非常に一般的なエラーは、Host ='%'およびUser ='some_user'の新しいエントリを挿入することです。これにより、同じマシンから接続するlocalhostを指定できると考えられます。これが機能しない理由は、デフォルトの権限にHost='localhost'およびUser=''のエントリが含まれているためです。そのエントリには「%」よりも具体的なホスト値「localhost」があるため、ローカルホストから接続するときに新しいエントリよりも優先して使用されます。正しい手順は、Host ='localhost'およびUser='some_user'の2番目のエントリを挿入するか、Host='localhost'およびUser=''のエントリを削除することです。エントリを削除した後、FLUSH PRIVILEGESステートメントを発行して、許可テーブルを再ロードすることを忘れないでください。セクション6.2.4「アクセス制御、ステージ1:接続の検証」も参照してください。

mysql.user最初のコマンドを実行した後、テーブルを確認してください

CREATE DATABASE foo DEFAULT CHARACTER SET = 'utf8';
GRANT ALL ON foo.* TO foo@'%' IDENTIFIED BY 'foo';
FLUSH PRIVILEGES;
select * from mysql.user where User='foo';
于 2012-12-16T13:41:24.753 に答える