(Mysql) GRANT文が意味不明だったので使い方をまとめてみた

mysql-grant

 

本記事では、
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やテーブル単位で何の操作ができるか権限を付与できる文のことだ。

mysql-grant-image

 

要は、ユーザに権限をGRANTする(与える)のがGRANT文なんだよと言う意識をまずは持ってもらえれば大丈夫

 

GRANT文の構造・書式




GRANT文がユーザにDB操作の権限を与えると言うことが理解できたところで、次に、
GRANT文の構造(書式)について解説していく。

結論から書くと、GRANT文の構造(書式)は以下のようである。

GRANT 与えるsql権限 ON どのDBに.どのテーブルに TO どのユーザ名に@どのホストからの ( WITH GRANT OPTION)

 

長い、、とても覚えられないので、ケースごとにGRANT文の使い方を解説していく。

 

GRANT文の使い方をケースごとに紹介

GRANT文の使い方は書式も長く複雑なので、
ケース毎に分けて紹介した方が想像と理解が早いと思うので、ケースごとに紹介していく。

まずはすでに冒頭でも紹介した以下の画像だが、以下のようなケース毎で解説していく。

mysql-grant-image

 

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)で行うのが正しい。

 

だから基本は使わないものと思って構わないと思う。たぶん。

 

関連記事

(SQL) テーブル結合をちゃんと理解する【inner、outer、full、cross join の違い】
(SQL) EXISTS句【相関副問合せ】の使い方 〜存在チェックを実施する〜
mysql-character-set-collation

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

記事が気に入った方はシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。