MySQLにおいて、特定のユーザに対して
- usersテーブルには読み込みだけ(select)
- postsテーブルには読み書き両方(select, insert, update, delete)
と言った風にテーブル毎に権限を変更したい場合は、
GRANT 権限 ON db_name.table_name TO user;
のようにして権限を変更することができます。 具体的には、
mysql> GRANT select ON hogedb.users TO user1; mysql> GRANT select,insert,update,delete ON hogedb.posts TO user1;
のようにして設定します。
MySQLでは大きく分けて5つのレベルで権限を変更することができ、テーブル毎だけでなくカラム毎などでも変更することができます。
グローバル レベル(G) グローバルレベル権限は全てのデータベースに適用される権限です。この権限は mysql.user テーブルに格納されます。 データベース レベル(D) データベースレベル権限は特定のデータベース内の全てのオブジェクトに適用さ れる権限です。この権限は mysql.db と mysql.host テーブル内に格納されます。 テーブル レベル(T) テーブルレベル権限は特定のテーブル内の全てのカラムに適用される権限です。 この権限は mysql.tables_priv テーブル内に格納されています。 カラム レベル(C) カラムレベル権限は特定テーブル内の単一カラムに適用される権限です。この権 限は mysql.columns_priv テーブル内に格納されています。 ルーチン レベル CREATE ROUTINE、ALTER ROUTINE、EXECUTE、そして GRANT 権限はストアド ルー チンに適用される権限です。(ファンクションとプロシージャ)それらは、グロー バルとデータベース レベルで供与されます。また、CREATE ROUTINE 以外は、こ れらの権限は各ルーチンに対してルーチン レベルで適用する事ができ、 mysql.procs_priv テーブル内に格納されます。
グローバルレベル: GRANT 権限 ON *.* TO user; データベースレベル: GRANT 権限 ON db_name.* TO user; テーブルレベル: GRANT 権限 ON db_name.table_name TO user; カラムレベル: GRANT 権限 (カラム1, カラム2, ...) ON db_name.table_name TO user;