MySQL上でのユーザー・権限設定について必要だったことを纏めました。具体的には、以下について書きました。
- rootユーザーのユーザー名の変更
- パスワードの変更
- 新しいユーザーの作成
- 権限設定
- 権限設定の反映
MySQL ver. 8.0.21 で動作確認済みです。
MySQL上のユーザー・権限の仕様について
ユーザーは、ユーザーと接続元がプライマリキーとして mysql.user
テーブルに保存されています。コマンドでユーザーに対する操作を行う場合には、「ユーザー名@接続元」という形式を利用します。
例:
- 'root'@'localhost' - localhostからのアクセスでのrootユーザーの権限設定
- 'root'@'%' - 全てのHostからのアクセスでのrootユーザーの権限設定
rootユーザーを変更する
rename user 'root'@'localhost' to 'new-root-user'@'localhost';
rename user 'root'@'%' to 'new-root-user'@'localhost';
パスワードを変更する
SET PASSWORD FOR 'new-root-user'@'localhost' = 'new-password';
SET PASSWORD FOR 'new-root-user'@'%' = 'new-password';
新しいユーザーを作成する
CREATE USER 'new-user'@'%' IDENTIFIED BY 'new-password';
権限を付与する
特に、ユーザーを新たに作成した場合は権限が付与されていないため、権限の付与が必須です。
# 例:あるDBに対してのみ、全権限を付与する。指定されたDB内であれば全ての操作ができる)
GRANT ALL PRIVILEGES ON db_schema.* TO 'user'@'%';
# 例:あるDBに対してのみ、テーブルとVIEWのSELECTの権限を付与する。
GRANT SELECT, SHOW VIEW ON db_schema.* TO 'user'@'%';
詳しい権限の設定については、公式ドキュメント内の「Summary of Available Privileges」で確認できます。
本記事では触れませんが、「READ ONLY」の権限を付与するにはどうするか、という問いに対してはこちらの投稿を併せて見ると良いかと思います。
権限関連の設定を反映させる
FLUSH PRIVILEGES;