MySQL 権限制御の詳細な説明

MySQL 権限制御の詳細な説明

mysql 権限制御

DBA として、MySQL の権限について理解している必要があります。MySQL の権限の制御は、次の 3 つのレベルに分かれています。

  • MySQLインスタンス全体に適用されるグローバル管理権限
  • データベース レベルの権限は、特定のデータベースまたはすべてのデータベースに適用されます。
  • データベース オブジェクト レベルの権限は、指定されたデータベース オブジェクト (テーブル、ビューなど) またはすべてのデータベース オブジェクトに適用されます。

ここでは、MySQL のすべての権限をリストし、最後に MySQL 権限制御の小さなバグを反映する特別なケースを示します。まず、権限リストを見てみましょう。権限はアルファベット順に並べられています。

•すべて/すべての権限
この権限は、グローバルまたはデータベース全体のオブジェクト レベルのすべての権限を表します。
•変更
この権限によりテーブル構造を変更できますが、作成権限と挿入権限も必要になります。
テーブルの名前を変更する場合は、元のテーブルを変更および削除し、新しいテーブルを作成して挿入する権限が必要です。
•ルーチンを変更する
この権限により、ストアド プロシージャおよび関数を変更または削除できます。
•作成する
この権限により、新しいデータベースとテーブルを作成できます。
•ルーチンを作成する
この権限により、ストアド プロシージャと関数を作成できます。
• テーブルスペースの作成
この権限により、表領域とログ グループを作成、変更、および削除できます。
•一時テーブルを作成する
この権限により、一時テーブルを作成できます。
•ユーザーの作成
この権限により、ユーザーの作成、変更、削除、名前変更が可能になります。
•ビューの作成
この権限により、ビューを作成できます。
•消去
この権限により、行データを削除できます。
•落とす
この権限により、truncate table コマンドを含む、データベース、テーブル、ビューを削除できます。
•イベント
この権限により、MySQL イベントのクエリ、作成、変更、および削除が可能になります。
•実行する
この権限により、ストアド プロシージャと関数の実行が可能になります。
•ファイル
この権限により、MySQL がアクセス可能なディレクトリ内のディスク ファイルの読み取りと書き込みが可能になります。
使用可能なコマンドには、load data infile、select ... into outfile、load file() 関数などがあります。
• 付与オプション
この権限は、このユーザーが他のユーザーに付与した権限を承認または取り消すことを許可するかどうかを示します。
•索引
この権限は、インデックスの作成と削除を許可するかどうかを示します。
•入れる
この権限は、テーブルにデータを挿入できるかどうかを示します。挿入権限は、analyze table、optimize table、repair table ステートメントを実行する場合にも必要です。
•ロック
この権限により、選択権限でテーブルをロックし、他のリンクがこのテーブルを読み取ったり書き込んだりするのを防ぐことができます。
•プロセス
この権限により、showprocesslistの実行など、MySQLのプロセス情報を表示できます。
•参照
この権限はバージョン 5.7.6 以降で導入され、外部キーの作成を許可するかどうかを示します。
•リロード
この権限により、flush コマンドの実行が許可され、権限テーブルがシステム メモリに再ロードされます。refresh コマンドは、ログ ファイルを閉じて再度開き、すべてのテーブルを更新することを意味します。
•レプリケーションクライアント
この権限により、show master status、show slave status、show binary logs コマンドの実行が許可されます。
•レプリケーションスレーブ
この権限により、スレーブ ホストはこのユーザーを介してマスターに接続し、マスターとスレーブのレプリケーション関係を確立できるようになります。
•選択
この権限により、テーブルからデータを表示できます。また、where 条件を含む update/delete ステートメントを実行するときにも select 権限が必要です。
•データベースを表示
この権限は、show databases コマンドを実行してすべてのデータベース名を表示できることを意味します。
•ビューを表示
この権限は、show create view コマンド、mysqladmin processlist、show engine などのコマンドを実行して、ビューによって作成されたステートメントを表示できることを意味します。
•シャットダウン
この権限により、データベースインスタンスをシャットダウンできます。mysqladminshutdownなどのステートメントを実行します。
•素晴らしい
この権限により、接続を強制的に閉じる kill コマンド、レプリケーション関係を作成する change master to コマンド、create/alter/drop server コマンドなど、一連のデータベース管理コマンドを実行できます。
•トリガー
この権限により、トリガーを作成、削除、実行、および表示できます。
•アップデート
この権限により、テーブル内のデータを変更できます。
•使用法
この権限は、ユーザー作成後のデフォルトの権限であり、それ自体が接続ログイン権限を表します。

権限システムテーブル

権限は、mysql データベースの user、db、tables_priv、columns_priv、および procs_priv システム テーブルに保存され、MySQL インスタンスの起動後にメモリにロードされます。

• ユーザーテーブル:

ユーザーアカウント情報とグローバルレベル(すべてのデータベース)の権限を格納します。これにより、どのホストのどのユーザーがデータベースインスタンスにアクセスできるかが決まります。グローバル権限がある場合、すべてのデータベースにこの権限があることを意味します。
• Dbテーブル:

どのホストのどのユーザーがこのデータベースにアクセスできるかを決定するデータベースレベルの権限を保存します。
• Tables_priv テーブル:

テーブルレベルの権限を格納します。これにより、どのホストのどのユーザーがデータベース内のこのテーブルにアクセスできるかが決まります。
• Columns_priv テーブル:

列レベルの権限を格納します。これにより、どのホストのどのユーザーがデータベース テーブル内のこのフィールドにアクセスできるかが決まります。
• Procs_priv テーブル:

ストアドプロシージャと関数レベルの権限を保存します

変更後にMySQLの権限を有効にする方法

• Grant、revoke、setpassword、または renameuser コマンドを実行して権限を変更すると、MySQL は変更された権限情報を自動的にシステム メモリにロードします。
• 上記のシステム権限テーブルに対して挿入/更新/削除操作を実行する場合は、システム メモリに同期するために、権限の更新コマンドを実行する必要があります。権限の更新コマンドには、flush privileges/mysqladmin flush-privileges/mysqladmin reload があります。
• テーブルおよび列レベルで権限を変更すると、新しい権限はクライアントが次回操作されたときに有効になります。
• データベース レベルの権限を変更した場合、新しい権限はクライアントが use database コマンドを実行した後に有効になります。
• グローバルレベルの権限を変更した場合、新しい権限を有効にするには接続を再作成する必要があります。
• --skip-grant-tables は、すべてのシステム権限テーブルをスキップし、すべてのユーザーのログインを許可します。これは、特別な状況でのみ一時的に使用されます。

権限の付与と取り消し

権限を付与する場合、通常は grant ステートメントが使用されます。クエリを例にとると、詳細は次のとおりです。

db_name.table_name に対する選択権限を user@host に付与します。

データベース内のすべてのテーブルへの権限をアカウントに付与する場合は、上記のステートメントの table_name を * に変更する必要があります。データベース内のすべてのデータベースのすべてのテーブルへの権限を付与する場合は、db_name と table_name の両方を * に変更する必要があります。

revoke 構文は通常、権限を取り消すために使用されます。クエリを例にとると、その使用法は次のようになります。

user@host からの db_name.table_name の選択を取り消します。

it と grant の違いは、文の最後の部分が から に変更されている点であることに注意してください。

特別なケース

今日、オンライン業務を処理しているときに、権限を開く必要がありました。ワークベンチ クライアントからストアド プロシージャを表示したいと考えました。最初の対応は、実行権限を直接付与することでした。その結果、実行権限を付与した後も、ビジネス パーティはストアド プロシージャを表示できませんでした。確認したところ、データベースに接続した後、次のように表示されました。

mysql> データベースを表示します。
+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
|AAA|
+--------------------+
セット内の 2 行 (0.00 秒)
mysql> AAAを使用する
データベースが変更されました
mysql> プロシージャのステータスを表示\G
************************** 1. 行 ****************************
     Db: CVS
    名前: ba_get_grow
    タイプ: 手順
    定義者: [email protected]
   更新日: 2019-02-26 ::
    作成日: 2019-02-26 ::
  セキュリティタイプ: DEFINER
    コメント:
文字セットクライアント: utf8
照合接続: utf8_general_ci
 データベース照合: utf8_general_ci

mysql> 作成プロシージャ ba_get_grow\G を表示します
************************** 1. 行 ****************************
   手順: ba_get_grow
   SQLモード:
 プロシージャの作成: NULL
文字セットクライアント: utf8
照合接続: utf8_general_ci
 データベース照合: utf8_general_ci
 セット内の行数 (0.00 秒)

29行目のcreate procedureの値がNULLになっており、プロシージャの内容が表示されていないことがわかります。もちろん、プロシージャを見ることはできません。このような場合はどうすればよいでしょうか。

mysql.proc テーブルにはストアド プロシージャに関する情報が含まれていると考えたため、次の方法を使用して mysql.proc テーブルに読み取り専用権限を与えました。

[email protected]:(なし) 22:35:07>> `mysql`.proc に対する選択権限を 'user'@'host' に付与します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

クライアントに再度ログインすると、次のようにストアド プロシージャの内容がすでに表示されていることがわかります。

mysql> データベースを表示します。
+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
|AAA|
+--------------------+
セット内の 2 行 (0.00 秒)

mysql> データベースを表示します。
+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
|AAA|
|mysql |
+--------------------+
セット内の 3 行 (0.00 秒)

mysql> 作成プロシージャ ba_get_grow\G を表示します
************************** 1. 行 ****************************
   手順: ba_get_grow
   SQLモード:
 プロシージャの作成: CREATE DEFINER=`dba_admin`@`127.0.0.1` PROCEDURE `ba_get_grow`(
 p_table_info varchar() では、
 出力 out_retmsg varchar()
)
始める
 XXXXXXXXX
 XXXXXXXXX
 XXXXXXXXX
 XXXXXXXXX
終わり
文字セットクライアント: utf8
照合接続: utf8_general_ci
 データベース照合: utf8_general_ci
 セット内の行数 (0.00 秒)

上記はMySQLの権限制御の詳細な内容です。MySQLの権限制御の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQLユーザー権限テーブルについての簡単な説明
  • MySQL ユーザー権限管理の実装
  • MySQLユーザー権限管理の詳細な説明
  • MySQL 権限制御の詳細分析
  • MySQLでユーザーを作成し、ユーザーに権限を付与する方法の詳細なチュートリアル
  • MySQL ストアド プロシージャ関連の権限変更の問題
  • MySQL 8.0 でリモートアクセス権限を設定する方法
  • MySQL 権限とデータベース設計のケーススタディ

<<:  ウェブページのカラーマッチング例分析: 緑色のカラーマッチングウェブページ分析

>>:  HTML構造化実装方法

推薦する

MySQL の binlog ログと、binlog ログを使用してデータを回復する方法を説明します。

ご存知のとおり、binlog ログは MySQL データベースにとって非常に重要です。万が一、データ...

React HTML で react を使用する 2 つの方法

基本的な使い方 <!DOCTYPE html> <html lang="...

MySQL 5.6 での table_open_cache パラメータの最適化と適切な構成の詳細な説明

1. はじめにtable_cache は非常に重要な MySQL パフォーマンス パラメータであり、...

MySQL 権限制御の詳細分析

目次1. グローバルレベル2. データベースレベル3. 表面レベル4. 列レベルの権限5. サブルー...

MySQL データベースの基礎を始めるための一般的なコマンドの概要

この記事では、MySQL データベースの基礎を学ぶためによく使用されるコマンドを例を使って説明します...

mysql-8.0.11-winx64.zip の詳細なインストール チュートリアル

zip インストール パッケージをダウンロードします。 MySQL8.0 For Windows z...

WeChatアプレットがジグソーパズルゲームを実装

この記事では、WeChatアプレットでジグソーパズルゲームを実装するための具体的なコードを参考までに...

HTML でよく使用されるエスケープ文字の概要

HTML でよく使用されるエスケープ文字をまとめると次のようになります。 &nbsp; 改行...

CSSレイアウトで中央揃えレイアウトを実現する方法

1. 親コンテナーをテーブルに設定し、子をインライン要素に設定します。テキストを表示するサブコンテン...

Linux gzipコマンドの使用

1. コマンドの紹介gzip (GNU zip) コマンドは、ファイルの圧縮と解凍に使用されます。こ...

CentOS 7.6 への MySQL 5.7 GA バージョンのインストール チュートリアル図

目次環境の準備環境の準備mariadbをアンインストールする rpm -qa | grep mari...

Vue フロントエンド開発における keepAlive の使用方法の詳細な説明

目次序文keep-avlive フック関数keep-avliveはどのコンポーネントをキャッシュする...

MySQL 8.0.13 手動インストールチュートリアル

この記事では、MySQL 8.0.13の手動インストールチュートリアルを参考までに紹介します。具体的...

シンプルなjQuery + CSSを使用してカスタムタグタイトルツールチップを作成します

導入シンプルな jQuery + CSS を使用して、ブラウザのデフォルトの動作を置き換えるカスタム...