スポンサーリンク

4-5.MySQLユーザーへのロールの割り当てと有効化

2019年7月15日

スポンサーリンク

スポンサーリンク

1.ロールを定義する方法

ロールを作成するには「CRATE ROLE」で定義します。

1)構文

CREATE ROLE [ロール名];

2)実行例

スポンサードサーチ

2.ロールに権限を付与する方法

ロールに権限を付与するにはGRANTを使用します。

1)構文

GRANT 権限 TO ロール;

2)実行例

 

スポンサードサーチ

3.ロールをユーザーアカウントに付与する

ロールをユーザーアカウントに付与するにはGRANTを使用します。

1)構文

GRANT ロール TO [ユーザーアカウント];

2)実行例

 

4.ユーザーアカウントへロールを付与する流れ

1)権限の状況確認

まずユーザー「USER01」の権限付与の状況を確認します。

ユーザーアカウント「USER01@localhost」には権限が付いていない状態です。

 

2)権限の付与

ユーザー「USER01」にロール「ROLE01」を付与します。

 

3)付与後の権限の状況確認

権限を付与後のユーザーアカウント「USER01」の状況を確認します。

「USER01@localhost」に「ROLE01」が付与されていることが確認できます。

しかし、これだけでは実は作業は足りていないのです。事項のようにロールを有効かする必要があります。

スポンサードサーチ

5.ロールを有効化する。

ロールは付与しただけでは有効になりません。ユーザーに対して有効化する必要があります。
方法は3通りあります。

1)セッション内でロール有効化する方法
2)ユーザーアカウントのデフォルトロールに設定する
3)システム変数「activate_all_roles_on_login」を「on」にする

1)セッション内でロール有効化する方法

この方法ではセッション内で付与されたロールを有効にします。

(1)設定方法

以下の構文でロールを有効にします。
【構文】
SET ROLE [ロール名];

(2)実行例

①データベースを設定してみます。

USE文でデータベースを設定できませんでした。これはユーザーアカウント「USER01@localhost」にはデータベース「studydb」でまだアクセス許可されているテーブルが無いためです。

②権限割り当て状況を確認してみます。
ロールは付与されているのにアクセス出来ない事が確認できます。

ロール「ROLE01」がちゃんと割り当てられています。エラーになるのはロールが有効になっていないためです。

③ロールを有効にします。

有効になりました。再度SELECTを試してみましょう。

ロールが有効になってデータベースの設定もテーブルへのアクセスもうまくいきました。

2)ユーザーアカウントのデフォルトロールに設定する

ユーザーアカウントのデフォルトロールに設定します。
これによりセッション開始と共にロールが割り当てられます。

(1)設定方法

【構文】

CREATE USER [ユーザーアカウント] IDENTIFIED BY ‘[パスワード]’ DEFAULT ROLE [ロール名];

ALTER USER [ユーザーアカウント] DEFAULT ROLE [ロール名];

(2)実行例

①rootユーザーでユーザー「USER01」のデフォルトロールを「ROLE01」に設定します。

②「USER01」でログインして権限付与状況を確認します。

③データベースを「studydb」に設定して「TABLE01」をSELECTしてみます。

↑ログインした時点でデフォルトロールが有効になっている為改めて有効化することなくSELECTがうまくいきました。

3)システム変数「activate_all_roles_on_login」を「on」にする

システム変数「activate_all_roles_on_login」を「on」にするとGRANTで権限を割り当てた時点で有効になります。

①現在の「activate_all_roles_on_login」の設定値を確認します。
以下のコマンドで値を確認できます。
SHOW VARIABLES LIKE ‘activate_all_roles_on_login’;

②「activate_all_roles_on_login」の値を「ON」に設定します。

③ユーザーアカウント「USER01」の権限付与状況を確認します。

④ユーザーアカウント「USER01」に「ROLE01」を付与します。

⑤ユーザーアカウント「USER01」の権限付与状況を確認します。

⑥ユーザーアカウント「USER01」に接続して「TABLE01」にアクセスしてみます。

SETで有効にしなくてもアクセス出来ました。

ブログランキング・にほんブログ村へにほんブログ村