web-dev-qa-db-ja.com

MySQLでGRANTが機能しないのはなぜですか?

MySQLユーザーを作成し、権限を付与する方法を示すヘルパーWebサイトがたくさんあるのを見て、これに頭を悩ませていますが、何らかの理由でうまくいきません。 WinXPと、最新のMySQLバージョンがインストールされたMacBook Proラップトップの両方で試しました。

以下は、WordPressで作業したときの例です。実際のデータベースは異なるものですが、同じ問題です。

手順は次のとおりです。

mysql> mysql -uroot -p<password>
mysql> CREATE DATABASE wwordpress;
mysql> CREATE USER 'www'@'localhost' IDENTIFIED BY 'basic';

クエリOK、影響を受けない行(0.14秒)

mysql> GRANT INSERT ON wordpress.* TO 'www'@'localhost' IDENTIFIED BY 'basic';

クエリOK、影響を受ける行はありません(0.00秒)

mysql> FLUSH PRIVILEGES;

クエリOK、影響を受ける行はありません(0.03秒)

mysql> SELECT * FROM mysql.user WHERE User='www' \G
 *************************** 1.行*************** ************ 
ホスト:localhost 
ユーザー:www 
パスワード:* E85C94AF0F09C892339D31CF7570A970BCDC5805 
 Select_priv:N 
 Insert_priv:N 
 Update_priv:N 
 Delete_priv:N 
 Create_priv:N 
 Drop_priv:N 
 Reload_priv:N 
 Shutdown_priv: N 
 Process_priv:N 
 File_priv:N 
 Grant_priv:N 
 References_priv:N 
 Index_priv:N 
 Alter_priv:N 
 Show_db_priv:N 
 Super_priv:N 
 Create_tmp_table_priv:N 
 Lock_tables_priv:N 
 Execute_priv:N 
 Repl_slave_priv:N 
 Repl_client_priv:N 
 Create_view_priv:N 
 Show_view_priv:N 
 Create_routine_priv:N 
 Alter _routine_priv:N 
 Create_user_priv:N 
 Event_priv:N 
 Trigger_priv:N 
 ssl_type:
 ssl_cipher:
 x509_issuer:
 x509_subject:
 max_questions:0 
 max_updates:0 
 max_connections:0 
 max_user_connections:0 
 1行セット(0.00秒) 
 
 mysql> 

ご覧のとおり、「Insert_priv:N」は「Y」である必要があります。

助言がありますか?

前もって感謝します。

41
Christopher

選択しているのはグローバル権限です。ただし、データベース(およびホストですが、それは重要ではありません)に特定の特権を与えています。

GRANT INSERTON wordpress.* TO 'www'@'localhost' IDENTIFIED BY 'basic';

これらの権限はdbテーブルに保存されます。

あなたを正しい方向に向けるだけです:

SHOW GRANTS FOR 'www'@'localhost'

http://dev.mysql.com/doc/refman/5.0/en/show-grants.html

39
The Surrican

それは、ほとんどのユーザーGRANT権限が保存されている場所ではありません-試してください

SHOW GRANTS FOR 'www'@'localhost'

代わりにデータベース固有の権限を表示します。 (許可は、すべてのデータベースに対するものである場合にのみ、ユーザーテーブルに表示されます。)

MySQLの アクセス許可の保存方法 の(やや古い)段階的な詳細を次に示します-状況はそれほど変わっていないと思います。

11
martin clayton

これは動作するはずです:

GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';

ユーザーが編集または挿入または削除できるページを制限する場合、YまたはNを選択する必要がある場合は、mysql.dbまたはmysql.tables_privテーブルを調べる必要があります。このテーブルは自動的に更新されます。 YsとNsは、データベースにログイン(接続を作成)できる特定のユーザーがあることを示すことを目的とするmysql.userとは対照的に、ユーザーがテーブルまたは列に対して持っている特権を表示するためだけに設計されています。

1