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() の使用法の概要

推薦する

Vue3+スクリプト設定+ts+Vite+Volarプロジェクト

目次Viteを使用してvue + tsプロジェクトを作成するVue 3の3つの構文オプションAPIコ...

1 つ以上の Linux インスタンスから SSH キー ペアのバインドを解除します。

キーペアの分離1 つ以上の Linux インスタンスから SSH キー ペアのバインドを解除します。...

Linux での MySQL データベースのアンインストール

Linux で MySQL データベースをアンインストールするにはどうすればいいですか? 以下では、...

セマンティック XHTML タグの紹介

まず最初に指摘しておきたいのは、人間は視覚的な区分を通じてコン​​テンツの意味を判断できるが、検索エ...

Vue コンポーネントの切り替え、動的コ​​ンポーネント、コンポーネントのキャッシュについて

目次1. コンポーネント切り替え方式方法1: v-ifとv-elseを使用する方法 2: 組み込みコ...

CSS3で背景画像にカラーマスクを追加する方法

以前、開発中に背景レイヤーにカラーマスクを追加する必要のあるプロジェクトに遭遇しました。ここでは、背...

Vueは小さなメモ帳機能を実装しました

この記事の例では、メモ帳の小さな機能を実現するためのvueの具体的なコードを参考までに共有しています...

JavaScriptは検証コードと検証のランダム生成を実装します

この記事では、検証コードのランダム生成と検証を実現するためのJavaScriptの具体的なコードを参...

Dockerコンテナが停止できない問題の解決方法

解決策は次のとおりです。 1. コンテナを強制削除する docker rm -f ジェンキンス2. ...

MySQLのカバーインデックスに関する知識ポイントのまとめ

インデックスにクエリする必要があるすべてのフィールドの値が含まれている(またはカバーしている)場合、...

CSS3 で作成された背景グラデーションアニメーション効果

成果を達成する 実装コードhtml <h1 class="text-light&qu...

Windows 上の Docker にさまざまなソフトウェアをインストールする詳細なプロセス

1. MySQLをインストールする # docker で mysql をダウンロード docker ...

node.js でマルチコア CPU を最大限に活用する方法

目次概要node.js でマルチコア CPU を最大限に活用する方法Node で子プロセスを作成する...

Centos7 での NFS サービス構築の紹介

目次1. サーバー2. クライアント3. テストサービス1. サーバー1. YUMソースを使用してN...

DockerプライベートライブラリHarborのアーキテクチャとコンポーネントの説明

この記事では、Harbor アーキテクチャの構成と、実行時に各コンポーネントを使用する方法について説...