はじめに
DB接続ユーザーの権限周りについて基本的な操作をまとめました。
MySQL8の環境になります。
ユーザー作成 ~ 権限の付与
ユーザーを確認する
SELECT user, host FROM mysql.user;

このコマンドでuse名rとhost名を確認することができる。SELECT *のようにアスタリスクで指定しても問題ないが、無駄に多くのカラムが表示されてしまうため、必要なuserとhostに絞って表示している。
新しいユーザーを作成する
CREATE USER 'userhoge'@'localhost';

CREATE USERによって、新たにuserhogeというユーザーが作成された。
作成したユーザーの権限を確認する
SHOW GRANTS FOR userhoge@'localhost';
SHOW GRANTS FORによって先ほど作成したユーザーであるuserhogeに付与されている権限・ユーザー名・ホストとレベルを確認できる。ちなみにUSAGEは権限無しという意味になる。
作成したユーザーに権限(CREATE権限)を付与する
GRANT CREATE on *.* to userhoge@localhost;

作成済みのuserhogeというユーザーにGRANT CREATEを使って権限を付与した。先ほどはUSAGEだった権限がCREATEに更新されている。CREATEは「データベースおよびテーブルの作成ができる権限」である。
GRANTで付与できる権限は主に
・ ALL:すべての権限(GRANT OPTION および PROXY を除く)
・ SELECT, UPDATE, INSERT, DELETE:よくある基本的な操作のやつ
・ USAGE:権限無し
などがある。その他や詳細については公式を確認↓
権限のレベル
権限のレベルは4種類ある。名前の通りではあるが、グローバル>データベース>テーブル>カラムの順に影響範囲が小さくなっていく。
グローバルレベル
GRANT 権限 ON *.* TO userhoge;
データベースレベル
GRANT 権限 ON db_name.* TO userhoge;
テーブルレベル
GRANT 権限 ON db_name.table_name TO userhoge;
カラムレベル
GRANT 権限 (カラム名) ON db_name.table_name TO userhoge;
