序文:前回の記事では、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';
要約:役割に関連する知識については、いくつかのポイントを簡単にまとめると次のようになります。
以上がMySQLのロール機能の詳細な紹介です。MySQLのロール機能の詳細については、123WORDPRESS.COMの他の関連記事をご覧ください。 以下もご興味があるかもしれません:
|
<<: 初心者でもウェブサイトアイコンを作成する手順をすぐに学べます
>>: Vue コンポーネントの切り替え、動的コンポーネント、コンポーネントのキャッシュについて
目次このシリーズの背景概要PostgreSQL データベースの準備ソースからインストール仮想環境の作...
導入私はしばらくの間、postgresql データベースを使用していました。クラウドに移行した後、自...
key_lenの意味MySQL では、次に示すように、explain を使用して SQL ステートメ...
目次アレイ重複排除1. from() を新しい Set() メソッドに重ねる2. スプレッド演算子 ...
目次1. 公式ドキュメント2. Vue CLIプロジェクトを作成する1. Vue CLIをインストー...
目次序文1. Mixin とは何ですか? 2. Mixin はいつ使用すればよいですか? 3. Mi...
この記事では、マウスドラッグ効果を実現するためのJavaScriptの具体的なコードを参考までに紹介...
MySQL には、主に left()、right()、substring()、substring_i...
目次質問分析する解決するAlert() 関数を置き換えるsetTimeOut関数まとめ質問数日前、J...
最も人気のあるフロントエンド フレームワークの 1 つとして、Vue は多くのフロントエンド開発エン...
目次1. 関数とメソッドの違い2. 良い関数の書き方2.1 正確な命名2.1.1 関数の命名2.1....
(1)はじめに: clipboard.js は、テキストをクリップボードにコピーする機能を実装する軽...
前回の記事で、mysqldump バックアップ ファイルに記録されるタイムスタンプ データは UTC...
この記事では、CSS スクロールバー セレクターを紹介し、Webkit ブラウザーと IE ブラウザ...
目次1. NanoIDがUUIDに取って代わる理由2. jsを生成する方法3. ナノID方式序文:ユ...