##はじめに
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;