mysql ステートメントを使用してユーザー権限を照会するプロセスの詳細な説明

mysql ステートメントを使用してユーザー権限を照会するプロセスの詳細な説明

MySQL では、ユーザーに付与された権限をどのように確認しますか? ユーザーに付与される権限は、グローバル レベルの権限、データベース レベルの権限、テーブル レベルの権限、列レベルの権限、およびサブルーチン レベルの権限に分けられます。具体的なカテゴリーは以下の通りです。

グローバルレベル

グローバル権限は、特定のサーバー内のすべてのデータベースに適用されます。これらの権限は mysql.user テーブルに保存されます。 GRANT ALL ON *.* および REVOKE ALL ON *.* は、グローバル権限のみを付与および取り消します。

データベースレベル

データベース権限は、特定のデータベース内のすべてのオブジェクトに適用されます。これらの権限は、mysql.db および mysql.host テーブルに保存されます。 GRANT ALL ON db_name.* および REVOKE ALL ON db_name.* は、データベース権限のみを付与および取り消します。

テーブルレベル

テーブル権限は、特定のテーブル内のすべての列に適用されます。これらの権限は、mysql.tables_priv テーブルに保存されます。 GRANT ALL ON db_name.tbl_name および REVOKE ALL ON db_name.tbl_name は、テーブル権限のみを付与および取り消します。

列レベル

列の権限は、特定のテーブル内の単一の列に適用されます。これらの権限は、mysql.columns_priv テーブルに保存されます。 REVOKE を使用する場合は、付与される列と同じ列を指定する必要があります。

サブルーチンレベル

CREATE ROUTINE、ALTER ROUTINE、EXECUTE、および GRANT 権限は、ストアド ルーチンに適用されます。これらの権限は、グローバル レベルまたはデータベース レベルで付与できます。また、CREATE ROUTINE を除き、これらの権限はサブプログラム レベルで付与でき、mysql.procs_priv テーブルに格納されます。

1: 次に、テスト アカウント test を作成し、グローバル レベルの権限を付与します。以下のように表示されます。

mysql> 'test' によって識別される te​​st@'%' に *.* の select、insert を許可します。
クエリは正常、影響を受けた行は 0 行 (0.01 秒)
mysql> 権限をフラッシュします。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
マイSQL>

次に、次の 2 つの方法を使用して、テストに付与された権限を照会できます。以下のように表示されます。

mysql> テストの権限を表示します。
+----------------------------------------------------------------------------------------------------------------+
| テスト@% の助成金 |
+----------------------------------------------------------------------------------------------------------------+
| パスワード '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29' で識別される 'test'@'%' に *.* の SELECT、INSERT 権限を付与 |
+----------------------------------------------------------------------------------------------------------------+
セット内の 1 行 (0.00 秒)
mysql> mysql.user から * を選択し、user='test'\G と入力します。
************************** 1. 行 ****************************
ホスト: %
ユーザー: テスト
パスワード: *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29
選択特権: Y
挿入権限: Y
更新権限: N
削除権限: N
作成権限: N
ドロップ権限: N
リロード権限: N
シャットダウン権限: N
プロセス権限: N
ファイル権限: N
権限付与: N
参照権限: N
インデックス権限: N
権限変更: N
表示_db_priv: N
スーパー特権: N
作成_tmp_table_priv: N
ロックテーブル権限: N
実行権限: N
Repl_slave_priv: N
Repl_client_priv: N
作成ビュー権限: N
表示権限: N
作成ルーチン権限: N
ルーチン権限の変更: N
ユーザー権限の作成: N
イベント特権: N
トリガー権限: N
テーブルスペース作成権限: N
SSL_タイプ: 
SSL暗号: 
x509_発行者: 
x509_件名: 
最大質問数: 0
最大更新回数: 0
最大接続数: 0
最大ユーザー接続数: 0
プラグイン:mysql_native_password
認証文字列: 
パスワードの有効期限: N
セット内の1行(0.04秒)
エラー: 
クエリが指定されていません
マイSQL> 

2: 次に、テスト アカウント test を作成し、データベース レベルの権限を付与します。以下のように表示されます。

mysql> ユーザーテストを削除します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
mysql> 'test' で識別される te​​st@'%' に、MyDB.* に対する select、insert、update、delete 権限を許可します。
クエリは正常、影響を受けた行は 0 行 (0.01 秒)
マイSQL> 
mysql> select * from mysql.user where user='test'\G; --権限がないことがわかります。
mysql> mysql.db から user='test'\G を選択して * を実行します。
************************** 1. 行 ****************************
ホスト: %
データベース: MyDB
ユーザー: テスト
選択特権: Y
挿入権限: Y
更新権限: Y
削除権限: Y
作成権限: N
ドロップ権限: N
権限付与: N
参照権限: N
インデックス権限: N
権限変更: N
作成_tmp_table_priv: N
ロックテーブル権限: N
作成ビュー権限: N
表示権限: N
作成ルーチン権限: N
ルーチン権限の変更: N
実行権限: N
イベント特権: N
トリガー権限: N
セット内の1行(0.04秒)
エラー: 
クエリが指定されていません
マイSQL> 
mysql> テストの権限を表示します。
+--------------------------------------------------------------------------------------------------------------------+
| テスト@% の助成金 |
+--------------------------------------------------------------------------------------------------------------------+
| パスワード '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29' で識別される 'test'@'%' に *.* の使用権限を付与 |
| `MyDB`.* に対する SELECT、INSERT、UPDATE、DELETE 権限を 'test'@'%' に付与します |
+--------------------------------------------------------------------------------------------------------------------+
セット内の 2 行 (0.00 秒)
マイSQL>

3: 次に、テスト アカウント test を作成し、テーブル レベルの権限を付与します。以下のように表示されます。

mysql> ユーザーテストを削除します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
mysql> 権限をフラッシュします。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
mysql> MyDB.kkk のすべての権限を、'test' で識別される te​​st@'%' に付与します。
クエリは正常、影響を受けた行は 0 行 (0.01 秒)
マイSQL> 
mysql> テストの権限を表示します。
+--------------------------------------------------------------------------------------------------------------------+
| テスト@% の助成金 |
+--------------------------------------------------------------------------------------------------------------------+
| パスワード '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29' で識別される 'test'@'%' に *.* の使用権限を付与 |
| `MyDB`.`kkk` のすべての権限を 'test'@'%' に付与します |
+--------------------------------------------------------------------------------------------------------------------+
セット内の 2 行 (0.00 秒)
mysql> mysql.tables_priv\G から * を選択します。
************************** 1. 行 ****************************
ホスト: %
データベース: MyDB
ユーザー: テスト
テーブル名: kkk
付与者: root@localhost
タイムスタンプ: 0000-00-00 00:00:00
Table_priv: 選択、挿入、更新、削除、作成、ドロップ、参照、インデックス、変更、ビューの作成、ビューの表示、トリガー
列の権限: 
セット内の1行(0.01秒)
エラー: 
クエリが指定されていません
マイSQL> 

4: 次に、テスト アカウント test を作成し、列レベルの権限を付与します。以下のように表示されます。

mysql> ユーザーテストを削除します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
mysql> 権限をフラッシュします。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
mysql> MyDB.TEST1 に対して、'test' で識別される te​​st@'%' に select (id, col1) を許可します。
クエリは正常、影響を受けた行は 0 行 (0.01 秒)
mysql> 権限をフラッシュします。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
マイSQL> 
mysql> mysql.columns_priv から * を選択します。
+------+------+-------+-------------+-------------+-----------------------------+
| ホスト | Db | ユーザー | テーブル名 | 列名 | タイムスタンプ | 列権限 |
+------+------+-------+-------------+-------------+-----------------------------+
| % | MyDB | テスト | TEST1 | id | 0000-00-00 00:00:00 | 選択 |
| % | MyDB | テスト | TEST1 | col1 | 0000-00-00 00:00:00 | 選択 |
+------+------+-------+-------------+-------------+-----------------------------+
セット内の 2 行 (0.00 秒)
mysql> テストの権限を表示します。
+--------------------------------------------------------------------------------------------------------------------+
| テスト@% の助成金 |
+--------------------------------------------------------------------------------------------------------------------+
| パスワード '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29' で識別される 'test'@'%' に *.* の使用権限を付与 |
| `MyDB`.`TEST1` に対して 'test'@'%' に SELECT (id, col1) 権限を付与します |
+--------------------------------------------------------------------------------------------------------------------+
セット内の 2 行 (0.00 秒)
マイSQL> 

5: 次に、テスト アカウント test を作成し、サブプログラム レベルの権限を付与します。以下のように表示されます。

mysql> PRC_TESTが存在する場合はプロシージャを削除します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
mysql> 区切り文字 //
mysql> プロシージャ PRC_TEST() を作成します
-> 開始
-> kkk から * を選択;
-> 終了 //
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
mysql> 区切り文字 ;
mysql> プロシージャ MyDB.PRC_TEST の実行権限を、'test' で識別される te​​st@'%' に付与します。
クエリは正常、影響を受けた行は 0 行 (0.01 秒)
mysql> 権限をフラッシュします。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
マイSQL> 
mysql> テストの権限を表示します。
+--------------------------------------------------------------------------------------------------------------------+
| テスト@% の助成金 |
+--------------------------------------------------------------------------------------------------------------------+
| パスワード '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29' で識別される 'test'@'%' に *.* の使用権限を付与 |
| プロシージャ `MyDB`.`prc_test` の実行権限を 'test'@'%' に付与します |
+--------------------------------------------------------------------------------------------------------------------+
セット内の 2 行 (0.00 秒)
mysql> mysql.procs_priv から User='test' を選択して * を実行します。
+------+------+------+--------------+--------------+----------------+-----------+--------------------+
| ホスト | Db | ユーザー | ルーチン名 | ルーチン タイプ | 付与者 | Proc_priv | タイムスタンプ |
+------+------+------+--------------+--------------+----------------+-----------+--------------------+
| % | MyDB | テスト | PRC_TEST | 手順 | root@localhost | 実行 | 0000-00-00 00:00:00 |
+------+------+------+--------------+--------------+----------------+-----------+--------------------+
セット内の 1 行 (0.00 秒)
マイSQL> 

したがって、ユーザーに付与された権限を表示する必要がある場合は、これらの 5 つのレベルから付与された権限を表示する必要があります。上から下へ、または小さいレベルから大きいレベルへ、各レベルに付与されている権限を 1 つずつ確認します。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • ユーザーの連続ログイン日数を調べるSQLクエリステートメント
  • MySqlは指定されたユーザーのデータベースビュークエリ権限を設定します
  • 継続的にアクティブなログインユーザーをクエリするHive-SQLのアイデアの詳細な説明

<<:  Vue は Tencent Map を統合して API を実装します (デモ付き)

>>:  Ubuntu 18.04の下のディレクトリにディスクをマウントします

推薦する

React プロジェクトにおける TypeScript の使用の概要

序文この記事では、TS の基本的な概念ではなく、プロジェクトで TypeScript (以下、TS ...

MySQL での GROUP_CONCAT の使用例の分析

この記事では、例を使用して、MySQL で GROUP_CONCAT を使用する方法について説明しま...

ウェブサイトのアクセス速度を向上させるための徹底的な最適化に関するヒント

<br />ウェブサイトのアクセス速度はウェブサイトのトラフィックに直接影響を及ぼし、ウ...

4つのファイル拡張子 .html、.htm、.shtml、.shtm の違い

ウェブページを作り始めたばかりの友人の多くは、拡張子が非常に多いことに気づきます。実際、htm と ...

Dockerコンテナのホスト間マルチネットワークセグメント通信ソリューションの詳細説明

1. マックヴラン前回のブログ投稿で紹介した Docker コンテナのホスト間通信を実現するための ...

Linux 上でプロジェクトをリリースするために Tomcat を展開するプロセスにおけるさまざまな問題と解決策

プロジェクトをプロジェクトサイトのテスト環境にデプロイするJDK1.8トムキャット8.5 Maven...

HTMLの表のtbodyは上下左右にスライドできます

テーブル ヘッダーが固定されている場合は、それを 2 つのテーブルに分割する必要があります。1 つの...

MySQLデータベースのタイムアウト設定を構成する方法の例

目次序文1. JDBCタイムアウト設定2. 接続プールのタイムアウト設定3. MyBatisクエリの...

GoのDockerデプロイメント用の基本イメージ2つの実装

1. golang:最新のベースイメージ mkdir gotest タッチメイン.go Docker...

HTML、CSS、JSコメントの標準的な使用法の概要

必要なコメントを追加することは、責任感と道徳心のあるフロントエンド開発者が持つべき良い習慣であり、コ...

フレックスレイアウトにおけるflex-growとflex-shrinkの計算方法の詳しい説明

CSS のFlex(彈性布局)すると、Web ページのレイアウトを柔軟に制御できます。Flex Fl...

Linuxシステムはルートアカウントのリモートログインコマンドを禁止しています

ps: Linux システムで root アカウントのリモート ログインを無効にする方法は次のとおり...

Linux サーバーのグラフィック カードのクラッシュの解決策

ログインインターフェースの解像度が特に大きい場合、グラフィカルインターフェース全体が特に大きくなり、...

MySQLのexecute、executeUpdate、executeQueryの違い

execute、executeUpdate、executeQuery の違い (およびそれらの戻り値...

MySQLのMVCCマルチバージョン同時実行制御の実装

1 MVCCとは何かMVCC の正式名称は、マルチバージョン同時実行制御です。データベースへの同時ア...