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

推薦する

Web フォントの読み込みを最適化する方法をご存知ですか?

タイトル通りです!一般的に使用される font-family はブラウザの組み込みフォントを読み込み...

Ubuntu 18.04 に opencv 3.2.0 をインストールするためのソリューション

opencv.zip をダウンロード依存関係を事前にインストールします。まずダウンロードソースを更新...

W3C チュートリアル (5): W3C XML アクティビティ

XML は、データを記述、保存、送信、交換するために設計されています。 XML 1.0 は XML ...

vue3.0 sfcのセットアップの変更について簡単に説明します。

目次序文標準的なSFCの書き方スクリプト設定可変露出部品の取り付け小道具カスタムイベント要約する序文...

mysql-8.0.19-winx64 をインストールしてログインするための初心者向けチュートリアル (初心者必読)

目次1. インストールパッケージ(64ビット)をダウンロードする2. MySQLデータベースをインス...

AngularパイプラインPIPEの紹介と使い方

序文PIPE、パイプラインと翻訳されます。 Angular パイプは、HTML コンポーネントで宣言...

Mysql の 2 つのテーブル間の結合クエリの 4 つの状況の概要

一般的に言えば、より完全な結果を得るためには、2 つ以上のテーブルから結果を取得する必要があります。...

PXEを使用してLinuxシステムを自動的に展開する方法

目次背景DHCPの設定DHCP ファイル (動的ホスト構成プロトコル) の編集tftp 設定sysl...

Vueは単一ファイルコンポーネントの完全なプロセス記録を実装します

目次序文単一ファイルコンポーネント基本概念シンプルなローダーコンポーネントコンテンツの解析コンポーネ...

Dockerfile を使用して Node.js サービスをデプロイする方法

Dockerfileを初期化するプロジェクトの名前が express であると仮定して、expres...

Vueでファジークエリを実装する方法の簡単な例

序文いわゆるファジークエリとは、ユーザーの完全な入力やすべての入力情報がなくてもクエリサービスを提供...

Linux C バックグラウンドサービスプログラムの単一プロセス制御の実装

導入通常、バックグラウンド サーバー プログラムには 1 つのプロセスのみが必要ですが、単一のプロセ...

3次元画像配置効果を実現する純粋なCSSのサンプルコード

1. 要素の幅/高さ/パディング/マージンのパーセンテージ基準要素の幅/高さ/パディング/マージンの...

MySQLで指定した時間前にレコードを自動的に削除する方法

イベントについて: MySQL 5.1 では、イベントの概念が導入され始めました。イベントは「時間ト...