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 5.7 および MySQL 8.0 でルートパスワードを変更する方法の概要

MySQL 5.7 バージョン:方法1: SET PASSWORDコマンドを使用するフォーマット: ...

MAC 上の MySQL の初期パスワードを忘れた場合の対処方法

MACでMySQLの初期パスワードを忘れた場合の解決策を参考までに共有します。具体的な内容は次のとお...

Vueを使用してタイマー機能を実装する

この記事の例では、タイマー機能を実装するためのVueの具体的なコードを参考までに共有しています。具体...

Linux ホスト名設定の詳細な紹介

目次1. Linuxホスト名を設定するクライアントホストを構成するサーバーホストを構成する2. ホス...

Vue カプセル化 TabBar コンポーネントの完全なステップ記録

目次実装のアイデア:ステップ 1: TabBar と TabBarItem のコンポーネント カプセ...

Linux における SUID、SGID、SBIT の素晴らしい使い方の詳細な説明

序文Linux のファイル権限管理はとにかく素晴らしいです。SUID、SGID、SBIT の機能を確...

JavaScript カラービューア

この記事では、カラービューアを実装するためのJavaScriptの具体的なコードを参考までに紹介しま...

Confluence と jira-software を Docker にデプロイする方法

バージョン: セントロス==7.2 jdk==1.8 合流==6.15.4 jira-ソフトウェア=...

Robots.txtの詳細な紹介

Robots.txt はプレーンテキスト ファイルであり、Web サイト管理者は、ロボットによるアク...

MySQLコマンドプロンプトで入力エラーが発生したときに前のコマンドを修正する方法

目次現在の問題解決プロセス具体的な手順解決した事件現在の問題MySQL コマンド プロンプトに複数行...

要素テーブルヘッダー行の高さの問題の解決

目次序文1. 問題の原因2. 解決策VueはelementUIテーブルtr thの高さと背景色を変更...

よく使われる HTML 形式のタグ_Powernode Java Academy

1. タイトルHTML では、<h1></h1> から <h6>...

XHTML CSSを使用して正式なブログを書く

ブログの正式名称は「Web log」で、中国語で「ネットワークログ」を意味します。後にブログに短縮さ...

MySQL でよく使用される SQL 文を表示する (詳細な説明)

#mysql -uroot -pパスワードを入力してくださいmysql> show full...

MySQL 5.7 zip版(zip版)のインストールと設定手順の詳細

はじめに: Windows 10 を再インストールし、同時にファイルを整理しました。しかし、MySQ...