MySQL GRANT ユーザー認証の実装

MySQL GRANT ユーザー認証の実装

承認とは、ユーザーに特定の権限を付与することです。たとえば、新しく作成したユーザーに、すべてのデータベースとテーブルを照会する権限を付与できます。 MySQL は、ユーザーの権限を設定するための GRANT ステートメントを提供します。

MySQL では、GRANT 権限を持つユーザーのみが GRANT ステートメントを実行できます。構文の形式は次のとおりです。

GRANT priv_type [(column_list)] ON database.table
ユーザー [[パスワード] 'password' によって識別] 宛て
[、user[[PASSWORD] 'password' によって識別]] ...
[with_option [with_option] で...]

で:

  • priv_type パラメータは権限の種類を示します。
  • columns_list パラメータは、権限が適用される列を示します。このパラメータを省略すると、テーブル全体に適用されます。
  • database.table は権限のレベルを指定するために使用されます。
  • ユーザー パラメータは、ユーザー名とホスト名で構成され、「'username'@'hostname'」という形式のユーザー アカウントを表します。
  • IDENTIFIED BY パラメータは、ユーザーのパスワードを設定するために使用されます。
  • パスワード パラメータはユーザーの新しいパスワードです。

WITH キーワードの後に​​は、1 つ以上の with_option 引数が続きます。このパラメータには 5 つのオプションがあり、それぞれの詳細は次のようになります。

  • GRANT OPTION: 承認されたユーザーはこれらの権限を他のユーザーに付与できます。
  • MAX_QUERIES_PER_HOUR カウント: 1 時間あたりに実行できるクエリの数を設定します。
  • MAX_UPDATES_PER_HOUR カウント: 1 時間ごとに実行できる更新の数を設定します。
  • MAX_CONNECTIONS_PER_HOUR カウント: 1 時間あたりに確立できる接続数を設定します。
  • MAX_USER_CONNECTIONS カウント: 単一のユーザーが同時に持つことができる接続の数を設定します。

MySQL では次の権限グループを付与できます。

  • 列の権限は、テーブル内の特定の列に関連しています。たとえば、UPDATE ステートメントを使用して、students テーブルの名前列の値を更新できます。
  • テーブル権限は、特定のテーブル内のすべてのデータに関連しています。たとえば、SELECT ステートメントを使用して、students テーブル内のすべてのデータの権限を照会できます。
  • データベース権限は、特定のデータベース内のすべてのテーブルに関連しています。たとえば、既存のデータベース mytest に新しいテーブルを作成する権限を付与できます。
  • ユーザー権限は MySQL 内のすべてのデータベースに関連しています。たとえば、既存のデータベースを削除したり、新しいデータベースを作成したりできます。

同様に、GRANT ステートメントで権限レベルを指定するために使用できる値の形式は次のとおりです。

  • *: 現在のデータベース内のすべてのテーブルを示します。
  • *.*: すべてのデータベース内のすべてのテーブルを示します。
  • db_name.*: データベース内のすべてのテーブルを表し、db_name はデータベース名を指定します。
  • db_name.tbl_name: データベース内のテーブルまたはビューを表します。db_name はデータベース名を指定し、tbl_name はテーブル名またはビュー名を指定します。
  • db_name.routine_name: データベース内のストアド プロシージャまたは関数を表します。routine_name は、ストアド プロシージャまたは関数の名前を指定します。
  • TO 句: 存在しないユーザーに権限が付与された場合、MySQL は自動的に CREATE USER ステートメントを実行してユーザーを作成しますが、同時にユーザーのパスワードを設定する必要があります。

権限タイプの説明

GRANT ステートメントにおける権限の種類について以下に説明します (詳細については、「MySQL ユーザー テーブルの詳細説明」セクションを参照してください)。

1) データベース権限を付与する場合、<権限タイプ> を次の値として指定できます。

権限名ユーザーテーブルのフィールドに対応する例示する
選択選択_privユーザーに、SELECT ステートメントを使用して特定のデータベース内のすべてのテーブルとビューにアクセスする権限が付与されていることを示します。
入れる挿入_privユーザーに、INSERT ステートメントを使用して特定のデータベース内のすべてのテーブルにデータ行を追加する権限が付与されていることを示します。
消去削除権限ユーザーに、DELETE ステートメントを使用して特定のデータベース内のすべてのテーブル内のデータ行を削除する権限が付与されていることを示します。
アップデート更新_privユーザーに、UPDATE ステートメントを使用して特定のデータベース内のすべてのデータ テーブルの値を更新する権限が付与されていることを示します。
参考文献参照_priv特定のデータベース内のテーブルを指す外部キーを作成する権限がユーザーに付与されていることを示します。
作成する作成_priv承認されたユーザーが CREATE TABLE ステートメントを使用して特定のデータベースに新しいテーブルを作成できることを示します。
変更権限の変更ユーザーに、ALTER TABLE ステートメントを使用して特定のデータベース内のすべてのデータ テーブルを変更する権限が付与されていることを示します。
ビューを表示表示権限を表示特定のデータベース内の既存のビューのビュー定義を表示する権限がユーザーに付与されていることを示します。
ルーチンを作成するルーチン権限の作成ユーザーに特定のデータベースのストアド プロシージャとストアド関数を作成する権限が付与されていることを示します。
ルーチンの変更ルーチン権限の変更ユーザーに、データベース内の既存のストアド プロシージャとストアド関数を更新および削除する権限が付与されていることを示します。
索引インデックス_priv特定のデータベース内のすべてのテーブルのインデックスを定義および削除する権限がユーザーに付与されていることを示します。
落とすドロップ_privユーザーに特定のデータベース内のすべてのテーブルとビューを削除する権限が付与されていることを示します。
一時テーブルの作成_tmp_table_priv を作成するユーザーに特定のデータベースに一時テーブルを作成する権限が付与されていることを示します。
ビューを作成作成_view_privユーザーに特定のデータベースに新しいビューを作成する権限が付与されていることを示します。
ルーチンの実行実行権限ユーザーに特定のデータベースのストアド プロシージャおよびストアド関数を呼び出す権限が付与されていることを示します。
ロックテーブルロックテーブル特権ユーザーに特定のデータベース内の既存のデータ テーブルをロックする権限が付与されていることを示します。
ALL または ALL PRIVILEGES または SUPERスーパー特権上記のすべての権限/スーパー権限を示します

2) テーブル権限を付与する場合、<権限タイプ> を次の値として指定できます。

権限名ユーザーテーブルのフィールドに対応する例示する
選択選択_priv SELECT ステートメントを使用して特定のテーブルにアクセスする権限をユーザーに付与します。
入れる挿入_privユーザーに、INSERT ステートメントを使用して特定のテーブルにデータ行を追加する権限を付与します。
消去削除権限特定のテーブルから行を削除するために DELETE ステートメントを使用する権限をユーザーに付与します。
落とすドロップ_privユーザーにテーブルを削除する権限を与える
アップデート更新_priv UPDATE文を使用して特定のテーブルを更新する権限をユーザーに付与します。
変更権限の変更ALTER TABLE ステートメントを使用してテーブルを変更する権限をユーザーに付与します。
参考文献参照_priv特定のテーブルを参照する外部キーを作成する権限をユーザーに付与します。
作成する作成_priv特定の名前のテーブルを作成する権限をユーザーに付与します。
索引インデックス_privユーザーにテーブルにインデックスを定義する権限を付与します。
ALL または ALL PRIVILEGES または SUPERスーパー特権すべての権限名

3) 列権限を付与する場合、<権限タイプ> の値は SELECT、INSERT、UPDATE のみ指定でき、権限の後に列名リスト column-list を追加する必要があります。

4) 最も効率的な権限はユーザー権限です。
ユーザー権限を付与する場合、<権限タイプ> は、データベース権限を付与するときに指定したすべての値に加えて、次のいずれかの値にすることができます。

  • CREATE USER: ユーザーに新しいユーザーを作成および削除する権限を付与します。
  • SHOW DATABASES: ユーザーに、SHOW DATABASES ステートメントを使用して既存のすべてのデータベースの定義を表示する権限を付与します。

例1

GRANT ステートメントを使用して、パスワードが testPwd の新しいユーザー testUser を作成します。ユーザー testUser には、すべてのデータに対するクエリおよび挿入権限があり、GRANT 権限が付与されています。 SQL文と実行プロセスは以下のとおりです。

mysql> GRANT SELECT、INSERT ON *.*
    -> 宛先 'testUser'@'localhost'
    -> 'testPwd' によって識別されます
    -> GRANT オプション付き;
クエリは正常、影響を受けた行は 0 行、警告は 1 件 (0.05 秒)

以下に示すように、SHOW GRANTS ステートメントを使用して、ユーザー testUser の権限を照会します。

mysql> 'testUser'@'localhost' の権限を表示します。
+--------------------------------------------------------------------------+
| testUser@localhost への権限付与 |
+--------------------------------------------------------------------------+
| GRANT オプション付きで 'testUser'@'localhost' に *.* の SELECT、INSERT 権限を付与 |
+--------------------------------------------------------------------------+
セット内の 1 行 (0.00 秒)

結果は、testUser がすべてのデータベース内のすべてのテーブルに対してクエリおよび挿入権限を持ち、これらの権限を他のユーザーに付与できることを示しています。

拡大する

データベース管理者は、一般ユーザーを認証する際には特に注意する必要があります。不適切な認証は、データベースに致命的な損傷を与える可能性があります。ユーザーの権限が多すぎることが判明した場合は、REVOKE ステートメントを使用してできるだけ早く権限を取り消す必要があります。通常のユーザーには SUPER 権限と GRANT 権限を付与しないことをお勧めします。ユーザー権限の削除の詳細については、「MySQL REVOKE: ユーザー権限の削除」を参照してください。

これで、MySQL GRANT ユーザー認証の実装に関するこの記事は終了です。MySQL GRANT ユーザー認証に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL コピーテーブルと許可分析の 3 つの実装方法
  • MySQLの認証コマンドgrantの使い方
  • MySQL で権限を付与および取り消す方法の簡単な説明
  • メモを作成するためのMySQL権限管理付与コマンド
  • MySQL Grantコマンドの詳細な説明
  • MySQL の付与に関する注意事項

<<:  HTML における br と br/ の違い

>>:  JavaScript の setTimeout() の使用法の概要

推薦する

Vue ルーティングフォールバックに最適なソリューション (vue-route-manager)

目次ルーティングマネージャー背景はじめる問題を解決する方法要約するルーティングマネージャー各ジャンプ...

Vue2.x における双方向バインディングの原理と実装

目次1. 実施プロセス2. オブザーバーを表示する3. ウォッチャーを実装する4. コンパイルを実装...

Vue2.0でデータの双方向バインディング機能をjsを使って実装する

Object.definePropertyの理解文法:オブジェクト.defineProperty(o...

大きな MySQL テーブルに列を追加する方法

質問は https://www.zhihu.com/question/440231149 から参照さ...

Tomcat で静的リソースを処理するチュートリアル

序文Tomcat 内のすべてのリクエストは Servlet によって処理され、静的リソースも例外では...

MySQLテーブルのフィールドと関連属性をエクスポートする手順

データベース内のテーブルのフィールドとプロパティをエクスポートし、テーブルを作成してWordに保存す...

JS は Baidu 検索ボックスを実装します

この記事の例では、Baidu検索ボックスを実装するためのJSの具体的なコードを参考までに共有していま...

反応ルーティングでパラメータを渡すいくつかの方法についての簡単な説明

最初のパラメータ渡し方法は、動的ルーティングパラメータ渡しです。リンクのパス属性を設定することで、ル...

固定、流動的、柔軟なウェブページレイアウトの長所と短所の分析

ウェブデザイナーを長い間悩ませてきた疑問があります。それは、固定レイアウト、流動的レイアウト、柔軟レ...

MySQLデータベースについて学びましょう

目次1. データベースとは何ですか? 2. データベースの分類は? 3. データベースとデータ構造の...

オンラインMySQLオプティマイザの誤判断によって発生した低速クエリイベントを記録する

序文:非常に遅いクエリとリクエストのタイムアウトのアラートを受け取りました。メトリックを通じて My...

spanタグのスタイルに幅属性を設定する方法

span タグのスタイルに width 属性を直接設定すると、効果がないことがわかります。 disp...

ボタンに醜い灰色の枠線が付いています。これを削除するにはどうすればよいですか?

ダイアログをクロージャで使用し、右上隅の向こう側に閉じるボタンがあるダイアログを描画しました。ボタン...

HTMLはWEB標準の開発の中心的な基盤です

HTML 中心のフロントエンド開発は、ほぼ Web 標準の意味です。共通しているのは「分離」という考...

Vue のミックスインの使用方法の詳細な説明

目次序文1. Mixin とは何ですか? 2. Mixin はいつ使用すればよいですか? 3. Mi...