MySQL ロール関数の紹介

MySQL ロール関数の紹介

序文:

前回の記事では、MySQLの権限管理に関する知識を紹介しました。データベース インスタンスに多数のライブラリまたはユーザーが存在する場合、権限の管理はますます煩雑になり、権限を頻繁に変更する必要が生じることがあります。 MySQL 8.0 ではロール機能が追加され、権限管理がより便利になりました。この記事では、8.0 でのロール機能について見ていきます。

1. 役割の紹介

ロール機能は Oracle データベースに特有のものではなく、Oracle でよく使用されます。 MySQL バージョン 8.0 では、ついにロール機能が追加され、データベース ユーザー権限管理の新しい考え方が提供されました。

ロールは権限のコレクションとして見ることができ、このコレクションには「ロール」という統一された名前が付けられています。複数のデータベース ユーザーに同じロールの権限を付与できます。権限の変更は、ユーザーごとに変更する必要がなく、ロールを変更することで直接実行できるため、運用と管理が容易になります。ロールは作成、削除、変更することができ、その効果は管理するユーザーに適用されます。

ロールの機能について詳しく見てみましょう。

# ロールを作成する
mysql> ロール 'dev_role' を作成します。
クエリは正常、影響を受けた行は 0 行 (0.15 秒)

# ロールに権限を付与する mysql> grant select on db1.* to 'dev_role'@'%';
クエリは正常、影響を受けた行は 0 行 (0.12 秒)

# ロールの権限を表示します。mysql> show grants for 'dev_role'@'%';
+------------------------------------------+
| dev_role@% への権限付与 |
+------------------------------------------+
| `dev_role`@`%` に *.* の使用権限を付与 |
| `db1`.* に対する `dev_role`@`%` への SELECT 権限を付与します |
+------------------------------------------+

# ユーザーを作成し、ロール権限を付与します。mysql> create user 'dev1'@'%' identified by '123456';
クエリは正常、影響を受けた行は 0 行 (0.68 秒)

mysql> 'dev_role' を 'dev1'@'%' に付与します。
クエリは正常、影響を受けた行は 0 行 (0.38 秒)

# ユーザー権限を表示 mysql> show grants for 'dev1'@'%';
+------------------------------------+
| dev1@% への助成金 |
+------------------------------------+
| `dev1`@`%` に *.* の使用権限を付与 |
| `dev_role`@`%` を `dev1`@`%` に付与します |
+------------------------------------+
セット2列(0.63秒)

# ユーザー dev1 を使用して root@localhost にログインします ~]# mysql -udev1 -p123456

mysql> データベースを表示します。
+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
+--------------------+
セット内1列(0.34秒)

mysql> CURRENT_ROLE() を選択します。
+----------------+
| 現在のロール() |
+----------------+
| なし |
+----------------+
セット内1列(0.59秒)

どうしたの?我々が想像していたのと違って、ユーザーに特定のロール権限を付与した後、そのユーザーが対応する権限を取得できないようです。

これは、ユーザーに付与されたロールがユーザーのセッションで非アクティブであるために発生します。ユーザーにこのロールの権限が与えられるのは、付与されたロールがセッションでアクティブな場合のみです。現在のセッションでアクティブなロールを確認するには、CURRENT_ROLE() 関数を使用します。

# set default role コマンドを使用してロールをアクティブ化しますmysql> SET DEFAULT ROLE ALL TO dev1;
クエリは正常、影響を受けた行は 0 行 (0.77 秒)

# 再度ログインし、権限が正常であることを確認します。root@localhost ~]# mysql -udev1 -p123456

mysql> CURRENT_ROLE() を選択します。
+----------------+
| 現在のロール() |
+----------------+
| `dev_role`@`%` |
+----------------+
セット内1列(0.57秒)

mysql> データベースを表示します。
+--------------------+
| データベース |
+--------------------+
|db1|
| 情報スキーマ |
+--------------------+
2 列セット (1.05 秒)

set default role コマンドを使用してロールをアクティブ化するだけでなく、システム変数 activate_all_roles_on_login を変更することもできます。この変数は、ロールが自動的にアクティブ化されるかどうかを決定します。デフォルトは OFF で、自動的にアクティブ化されないことを意味します。新しいユーザーにロールを割り当てた後に手動でロールをアクティブ化する必要がないように、この変数を ON に変更することをお勧めします。

# activate_all_roles_on_login 変数を表示します。mysql> show variables like 'activate_all_roles_on_login';
+-----------------------------+-------+
| 変数名 | 値 |
+-----------------------------+-------+
| ログイン時にすべてのロールを有効にする | オフ |
+-----------------------------+-------+
セット1列目(1.53秒)

# この変数を有効にします。まず動的に有効にします。次に、このパラメータを my.cnf 構成ファイルに追加します。mysql> set global activate_all_roles_on_login = on;
クエリは正常、影響を受けた行は 0 行 (0.50 秒)

# ロールは自動的にアクティブ化されますmysql> create user 'dev2'@'%' identifier by '123456';
クエリは正常、影響を受けた行は 0 行 (0.68 秒)

mysql> 'dev_role' を 'dev2'@'%' に付与します。
クエリは正常、影響を受けた行は 0 行 (0.38 秒)

ルート@localhost ~]# mysql -udev2 -p123456

mysql> CURRENT_ROLE() を選択します。
+----------------+
| 現在のロール() |
+----------------+
| `dev_role`@`%` |
+----------------+
セット内1列(0.57秒)

mysql> データベースを表示します。
+--------------------+
| データベース |
+--------------------+
|db1|
| 情報スキーマ |
+--------------------+
2 列セット (1.05 秒)

2. 役割に関連する操作

上記では、ロールを作成し、ユーザーにロール権限を付与する方法を紹介しました。ロールに関連する操作は他にもたくさんあります。それらを見てみましょう。

# ロール権限を変更する mysql> grant select on db2.* to 'dev_role'@'%';
クエリは正常、影響を受けた行は 0 行 (0.33 秒)

# このロールを持つユーザーの権限は、再度ログインするとそれに応じて変更されます。root@localhost ~]# mysql -udev1 -p123456

mysql> データベースを表示します。
+--------------------+
| データベース |
+--------------------+
|db1|
| db2 |
| 情報スキーマ |
+--------------------+
3 列セット (2.01 秒)

# ロール権限を取り消す mysql> revoke SELECT ON db2.* from 'dev_role'@'%';
クエリは正常、影響を受けた行は 0 行 (0.31 秒)

# ユーザーのロールを取り消す mysql> revoke 'dev_role'@'%' from 'dev1'@'%';
クエリは正常、影響を受けた行は 0 行 (0.72 秒)

mysql> 'dev1'@'%' の権限を表示します。
+----------------------------------+
| dev1@% への助成金 |
+----------------------------------+
| `dev1`@`%` に *.* の使用権限を付与 |
+----------------------------------+
セット1列(1.06秒)

# ロールを削除します(ロールを削除すると、対応するユーザーはロールの権限も失います)
mysql> ロール dev_role を削除します。
クエリは正常、影響を受けた行は 0 行 (0.89 秒)

また、mandatory_roles 変数を使用して必須ロールを構成することもできます。必須ロールを使用すると、明示的にロールを付与する必要なく、サーバーはデフォルトですべてのユーザーにロールを付与します。 my.cnf ファイルを使用するか、SET PERSIST を使用して設定できます。次に例を示します。

# my.cnf 設定 [mysqld]
必須ロール = 'dev_role'

# 変更変数を設定します SET PERSIST required_roles = 'dev_role';


注意:mandatory_roles で設定されたロールの権限は取り消したり削除したりすることはできません。

要約:

役割に関連する知識については、いくつかのポイントを簡単にまとめると次のようになります。

  • ロールとは、さまざまな権限を割り当てることができる権限の集合です。
  • activate_all_roles_on_login 変数を有効にして、ロールを自動的にアクティブ化します。
  • ユーザーは複数のロールを持つことができ、ロールは複数のユーザーに付与できます。
  • ロール権限の変更は、対応するユーザーに適用されます。
  • ロールを削除すると、このロールを持つユーザーはこのロールの権限も失います。
  • すべてのユーザーにこのロールの権限が付与されるように、必須ロールを設定できます。
  • ロール管理はユーザー管理と似ていますが、ロールを使用してデータベースにログインできない点が異なります。

以上がMySQLのロール機能の詳細な紹介です。MySQLのロール機能の詳細については、123WORDPRESS.COMの他の関連記事をご覧ください。

以下もご興味があるかもしれません:
  • MySQL 8.0 のユーザーとロールの管理原則と使用方法の詳細
  • MySQL 8の新機能ROLEの詳しい説明

<<:  初心者でもウェブサイトアイコンを作成する手順をすぐに学べます

>>:  Vue コンポーネントの切り替え、動的コ​​ンポーネント、コンポーネントのキャッシュについて

推薦する

MySQL 8.0 以降の一般的なコマンドの詳細な説明

リモートアクセスを有効にする次のコマンドを実行して、root ユーザーのリモート アクセス権を有効に...

Centos7 で keepalived ログを別のパスに設定する方法の詳細な説明

Keepalived のインストール: cd <keepalived_sourcecode_p...

uniapp プロジェクトの最適化方法と提案

目次1. 複雑なページデータ領域をコンポーネントにカプセル化する2. 大きな画像の使用を避ける3. ...

CSS はこのように使用できますか?気まぐれなグラデーションの芸術

前回の記事「1行のCSSコードの魅力」では、たった1行のCSSコードで生成できる美しい(奇妙な感じと...

docker view container log コマンドの実装

なぜログを読む必要があるのでしょうか?たとえば、コンテナの起動に失敗したがプロンプトが表示されない場...

nginxとlvsのメリットとデメリット、そして適切な使用環境

まず最初に、ロード バランシングとは何かについて説明します。ロード バランシングとは、リクエストの内...

CSS オーバーフローラップの新しいプロパティ値をどこでも使用

1.まず、overflow-wrap属性を理解する CSS のoverflow-wrapプロパティは...

JSを使用して簡単な計算機を実装する

JSを使用して、参考用の簡単な計算機を完成させます。具体的な内容は次のとおりです。要件: 入力値は数...

MySQL共通ストレージエンジンの機能と使用方法の詳細な説明

この記事では、一般的な MySQL ストレージ エンジンの機能と使用方法を例を使って説明します。ご参...

Windows に MySQL をインストールする方法のグラフィック チュートリアル

概要: この記事では主に、Windows 環境に MySQL をインストールする方法について説明しま...

Dockerコンテナでyumを呼び出すときのエラーの解決方法

dockerfile またはコンテナ内で yum を実行すると、エラーが報告され、ソースが見つかりま...

MySQL EXPLAIN ステートメントの使用例

目次1. 使用方法2. 出力結果1.id 2.選択タイプ3.表4.パーティション5.タイプ6.可能な...

一般的な JavaScript 文字列メソッド 28 個と使用方法のヒントのまとめ

目次序文1. 文字列の長さを取得する2. 文字列の指定された位置の値を取得する(1) charAt(...

Javascript クロージャの使用シナリオの原則の詳細

目次1. 終了2. クロージャの使用シナリオ1.タイムアウトを設定する2. コールバック3. 手ぶれ...