はじめに
ワニさんは言った。
mysql8以降のどこかのバージョンでロールはアカウント作成時につけないといけない認識、、、
では、気を取り直して、、
自分が知りたいことを書いておきたく記事にしてみました。
どうせまとめるなら記事にしちゃえ系です
参考は以下参考が主です。
参考
https://dev.mysql.com/doc/refman/8.0/ja/roles.html
$ select version();
//8.0.33
sachiko
の箇所とかあればそこは自分のユーザー名に変更して考えてください。
localhost
の箇所はipが入る時もあります!
app_db
の箇所は指定したDB名なのでそこもよしなに変更お願いします!
全体的な流れ
// ロール(権限)のもとみたいなの作成。
$ CREATE ROLE 'app_developer';
// 作成したものに何を許可するかを付与(今回全部)
$ GRANT ALL ON * . * TO 'app_developer';
// アカウント作成時に作成した権限付与
$ CREATE USER 'ここにユーザー名'@'localhost' IDENTIFIED BY 'ここにパス' DEFAULT ROLE app_developer;
ex)
$ CREATE USER 'sachiko'@'localhost' IDENTIFIED BY 'sajkjs76' DEFAULT ROLE app_developer;
注意!
'ここにユーザー名'@'localhost'
のlocalhost
箇所ですが、
私はip指定しないと上手くいかない時ありました。
エラーログとかにipでているとかあれば確認してip入れる形にしたほうがいいかもです。
ex) CREATE USER 'sachiko'@'172.18.0.5' IDENTIFIED BY 'sajkjs76' DEFAULT ROLE app_developer;
ユーザーのロール確認
$ SHOW GRANTS FOR 'ここにユーザー名'@'localhost';
ex)
$ SHOW GRANTS FOR 'sachiko'@'localhost';
※出力イメージ※ もっといい感じに確認できるのかと思ったのですがこれが確認方法のようです、
Grants for sachiko@localhost
GRANT USAGE ON *.* TO `sachiko`@`localhost`
GRANT `app_developer`@`%` TO `sachiko`@`localhost`
ロール内容確認
※app_developer
は作成したロール名
$ SHOW GRANTS FOR 'app_developer';
ロール作成色々
// 上で実際使用したもの
$ GRANT ALL ON * . * TO 'app_developer';
// app_dbはDB名
$ CREATE ROLE 'app_developer_a';
$ GRANT ALL ON app_db.* TO 'app_developer_a';
// SELECTでSELECTのみ
$ CREATE ROLE 'app_read';
$ GRANT SELECT ON app_db.* TO 'app_read';
// INSERT, UPDATE, DELETEで更新系のみ
$ CREATE ROLE 'app_write';
$ GRANT INSERT, UPDATE, DELETE ON app_db.* TO 'app_write';
ロールの削除
※app_developer
は作成したロール名
$ DROP ROLE 'app_developer';
ロールをユーザーから外す
※ロール付与されるアカウントがあるの前提でお話します。アカウントは上らへんのCREATE USER
の記述参考。
※ロール作成の前提でお話します。ロール作成色々
の箇所参考
$ REVOKE 'app_developer' FROM 'sachiko'@'localhost';
作成したロール確認
$ SELECT User FROM `user` WHERE Host='%' AND User != 'root';
参考:
https://stackoverflow.com/questions/68555614/how-to-list-all-roles-created-in-mysql-8
上記のように作成したロールの付け替え(はできなさそう、、?)
ロール自体の内容は変更できそうですが、
ロールは結局アカウント作成時につけるしかないかと、、。
(確かmysql8のどこかのバージョンから権限はアカウント作成時につける的な約束な気がしたので、)
なので、ここではアカウント削除ロールの削除を参考に記載しておきます。
※localhostがipになるときもあるのでそこはよしなに。
// アカウント削除
$ DROP USER 'sachiko'@'localhost';
// ロール削除
$ DROP ROLE 'app_developer';
で新規にアカウント作成から、、、、一番上らへん参考
mysql8のどこからのバージョン以降は以下は使えなくなる的なの見たきがします。
なので以下は書きましたがおすすめしないでおきます。
$ GRANT UPDATE ON * . * TO 'sachiko'@'localhost';
最後に
終わりです!