【基本】MySQLの権限〜GRANT〜
権限とは
まず、そもそも権限とは何かといったところから確認をしていきます。 ユーザーでMySQLに接続した後に、CREATE文でデータベースやテーブルの作成を行ったり、SELECT文やINSERT文でデータの取得を行うためには、それらの操作に対する「権限」がそれぞれ必要があります。
権限のレベル
MySQLでは各ユーザーに対して、グローバルレベル(G)、データベースレベル(D)、テーブルレベル(T)、カラムレベル(C)というようなレベルがあり、大きく分けると6つのレベルに分けられています。またこれらは、それぞれの権限を付与することが可能です。 例えば、指定したデータベースにのみテーブルを作成する権限を与えることができたり、指定したテーブルのさらに指定したカラムの値のみを参照する権限を与えることができるなど、ユーザーにどこまで権限をもたせるか範囲をしていすることが可能です。
①グローバルレベル(G) グローバルレベル権限は、全てのデータベースに適用される権限です。この権限は、mysql.user テーブルに格納されます。 GRANT ALL On *.* TO 'ユーザー名'@'ホスト名';
②データベースレベル(D) データベースレベル権限は、指定したデータベース内の全てのオブジェクトに適用される権限です。この権限は、mysql.db テーブル内に格納されます。 GRANT ALL On 'データベース名'1.* TO 'ユーザー名'@'ホスト名';
③テーブルレベル(T) テーブルレベル権限は、指定したテーブル内の全てのカラムに適用される権限です。この権限は、mysql.tables_priv テーブル内に格納されます。 GRANT ALL On 'データベース名'.'テーブル名' TO 'ユーザー名'@'ホスト名';
④カラムレベル(C) カラムレベル権限は、指定したテーブル内の選択されたカラムに適用される権限です。この権限は、 mysql.columns_priv テーブル内に格納されます。 GRANT ALL('カラム名') On 'データベース名'.'テーブル名' TO 'ユーザー名'@'ホスト名';
⑤ルーチンレベル(R) CREATE ROUTINEやALTER ROUTINE、EXECUTEなどの権限は、ストアドルーチンに適用される権限です。これらは、先ほどのグローバルレベルとデータベースレベルで与えられます。また、CREATE ROUTINE以外の権限は、各ルーチンに対して、このルーチンレベルで適用することが可能です。
⑥プロキシユーザー権限(P) この権限は、あるユーザーがその他の別のユーザーの代理となることが可能となります。
権限のコマンド
権限の確認
データベースの権限の確認 SELECT user,host,password FROM mysql.user;
新しいユーザーを作成する CREATE USER 'ユーザー名' IDENTIFIED BY 'パスワード'; 「IDENTIFIED BY」はパスワードを指定する際に必要になります。
個別のユーザー権限の確認 SHOW GRANTS FOR 'ユーザー名'@'ホスト名';
ユーザーとホストの指定
CREATE USERでユーザーを作成をした際の、ユーザー名とホストと同じものを指定します。ホスト名にワイルドカードを利用している場合はワイルドカードをそのまま記述します。 記述方法としては、GRANTの後に具体的にどのような権限を付与したいかを記述します。
アクセス制限
全てのデータベースにアクセスできる一般ユーザー GRANT ALL ON *.* TO 'ユーザー名'@'ホスト名' IDENTIFIED BY 'パスワード';
特定のデータベースにアクセスできる一般ユーザ GRANT ALL ON 'データベース名'.* TO 'ユーザー名'@'ホスト名' IDENTIFIED BY 'パスワード';
SQLのSELECT/INSERT/UPDATE/DELETEのみ権限が許可された一般ユーザ GRANT SELECT,INSERT,UPDATE,DELETE ON 'データベース名'.* TO 'ユーザー名'@'ホスト名' IDENTIFIED BY 'パスワード';
SQLのSELECTのみに権限が許可した一般ユーザー GRANT SELECT ON 'データベース名'.* To 'ユーザー名'@'ホスト名';
ユーザーとホストを指定する際の注意点
MySQLでは、ユーザーがまったく同じの名前でも、ホストが変わってしまうと全くの別のユーザーとして扱われることになります。そのため、指定する際に設定したユーザー名とホスト名が一致しないとなった場合は、ユーザーが存在しないことになるためエラーとなります。
まとめ
いかがでしたでしょうか? 権限はMySQLを扱う上で必要になることが多々あるでしょう。 権限についてやGRANTを使用した権限の付与や確認方法などを確認する際は、ぜひこの記事のことを思い出してみてください。