本記事では、
MySQLなどで使うGRANT文について、ケース別に使い方や意味をまとめてみた。
MySQLで使う”GRANT 何ちゃら~”って文
以下はMySQLなどで使うGRANT文のサンプル。
grant all privileges on *.* to ユーザ名@'URL or IPアドレス' identified by 'パスワード' with grant option;
DLLでもDMLでもない訳わからん長いやつ。
よくわからなかったので、使い方や意味をググってみた。
GRANT文とは
SQLのGRANT文とは、
ログインユーザ(どのPCから来たか単位)毎に、DBやテーブル単位で何の操作ができるか権限を付与できる文のことだ。

要は、ユーザに権限をGRANTする(与える)のがGRANT文なんだよと言う意識をまずは持ってもらえれば大丈夫
GRANT文の構造・書式
GRANT文がユーザにDB操作の権限を与えると言うことが理解できたところで、次に、
GRANT文の構造(書式)について解説していく。
結論から書くと、GRANT文の構造(書式)は以下のようである。
GRANT 与えるsql権限 ON どのDBに.どのテーブルに TO どのユーザ名に@どのホストからの ( WITH GRANT OPTION)
長い、、とても覚えられないので、ケースごとにGRANT文の使い方を解説していく。
GRANT文の使い方をケースごとに紹介
GRANT文の使い方は書式も長く複雑なので、
ケース毎に分けて紹介した方が想像と理解が早いと思うので、ケースごとに紹介していく。
まずはすでに冒頭でも紹介した以下の画像だが、以下のようなケース毎で解説していく。

localhostからアクセスしたユーザー”userA”に、すべてのデータベースにアクセス出来る権限を付与
GRANT ALL PRIVILEGES ON *.* TO 'userA'@'localhost' ;
localhostからアクセスしたユーザー”userB”に、データベース”db1″のみにアクセス出来る権限を付与
GRANT ALL PRIVILEGES ON db1.* TO 'userB@'localhost' ;
localhostからアクセスしたユーザー”userC”に、データベース”db1″のテーブル”table1″のみにアクセス出来るを作成
GRANT ALL PRIVILEGES ON db1.table1 TO 'userC'@'localhost' ;
localhostからアクセスしたユーザー”userD”に、データベース”db1″のテーブル”table2″のみにSELECT文を実行できる作成
GRANT SELECT ON db1.table2 TO 'userD'@'localhost' ;
localhostからアクセスしたユーザー”userE”に、データベース”db2″のテーブル”table3″のカラム”columnX”のみにSELECT文を実行できる作成
GRANT SELECT ( columnX ) ON db2.table3 TO 'userE'@'localhost' ;
192.168.1.*からアクセスしたユーザー”userF”に、データベース”db2″のテーブル”table4″のカラム”columnY”のみにSELECT文を実行できる作成
GRANT SELECT ( columnY ) ON db2.table4 TO 'userF'@192.168.1%' ;
上記のように、各ケースで細かくMysqlデータベースへのアクセスを指定できるのがGRANT文。
with grant option
冒頭のGRANT文で付けていたこの「grant」オプション、
GRANT文を実行できるよって権限を付与するオプションだ。
でもこの文は注意が必要。
GRANT文は上記のように細かくユーザごとのデータベースアクセス権を設定できる特権文だ。
つまり基本は管理者権限(root)で行うのが正しい。
だから基本は使わないものと思って構わないと思う。たぶん。
関連記事
https://dev.mysql.com/doc/refman/5.7/en/grant.html
https://atmarkit.itmedia.co.jp/ait/articles/1703/01/news191.html
https://qiita.com/atsuatsupoteto/items/9770d7b066bca54be421
コメントを残す