LoginSignup
0
1

More than 1 year has passed since last update.

mysql8 アカウント作成時にロール(権限(どこまで許可するか))付与と少し色々

Last updated at Posted at 2023-04-30

はじめに

ワニさんは言った。
:crocodile:mysql8以降のどこかのバージョンでロールはアカウント作成時につけないといけない認識、、、

では、気を取り直して、、

自分が知りたいことを書いておきたく記事にしてみました。:cat2:
どうせまとめるなら記事にしちゃえ系です:bow_tone1:
参考は以下参考が主です。:jack_o_lantern:

参考
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';

最後に

終わりです!:rabbit2:

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1