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 コンポーネントの切り替え、動的コ​​ンポーネント、コンポーネントのキャッシュについて

推薦する

LinuxでDHCPサーバーを構築する方法

目次1. 基礎知識: 2. DHCPサーバーの設定: 1. サーバーのIPを確認する2. DHCP ...

誰もが登録できるようにJiedaibaoを宣伝するにはどうすればよいでしょうか? ジエダイバオのプロモーション方法とスキル

借財宝は最近人気が出ている携帯電話ローンソフトウェアプラットフォームです。知人同士の貸し借りが特徴で...

mysql を解決: エラー 1045 (28000): ユーザー 'root'@'localhost' のアクセスが拒否されました (パスワードの使用: NO/YES)

1. 問題時々Mysqlにログインしてパスワードを入力すると、この状況が発生しますmysql -u...

MySQL パーティション テーブルの基本入門チュートリアル

序文最近のプロジェクトでは、大量のデータを保存する必要があり、このデータには有効期限があります。クエ...

docker compose を使用して fastDFS ファイル サーバーを構築する方法

前回の記事では、docker compose を使用して FastDfs ファイル サーバーをインス...

フロントエンド HTML+CSS+JS を使用してシンプルな TODOLIST 関数を開発する (メモ帳)

目次1. 簡単な紹介2. スクリーンショットを実行する3. コードの紹介4. まとめ1. 簡単な紹介...

Bootstrap FileInputは画像アップロード機能を実装します

この記事の例では、Bootstrap FileInputの具体的なコードを共有して、画像アップロード...

dockerにmysqlをインストールした後にNavicatが接続できない問題に対する完璧な解決策

1. Dockerがイメージをプルするdocker pull mysql (デフォルトで最新バージョ...

MySQL 5.7 でデータベースのデータ保存場所を変更する方法

MySQL データベースに保存されるデータが徐々に増加すると、元のストレージ領域がいっぱいになり、M...

HTML シンボルからエンティティへのアルゴリズムのチャレンジ

チャレンジ:文字列内の文字 &、<、>、" (二重引用符)、および &...

ウェブフォームデザインのための5つの実用的なヒント

1. フォームテキスト入力のモバイル選択: テキスト入力フィールドにプロンプ​​トが追加されている場...

HTML ベースタグ target=_parent の使用の紹介

<base> タグは、ページ上のすべてのリンクのデフォルトのアドレスまたはデフォルトのタ...

Reactでコンポーネントを作成する方法

目次序文コンポーネントの紹介クラスコンポーネントの作成状態についてレンダリングについて関数コンポーネ...

MySQL の起動オプションとシステム変数の例の詳細な説明

目次ブートオプションコマンドラインパラメータの長い形式と短い形式設定ファイル構成グループシステム変数...

Ubuntu での MySQL および MySQL Workbench のインストール チュートリアル

Ubuntu に jdk をインストールする: [リンク] UbuntuにEclipseをインストー...