MySQLアカウントのIP制限条件を変更する方法

MySQLアカウントのIP制限条件を変更する方法

序文

最近、仕事で、MySQL ユーザーの権限を変更するには、特定の IP アドレスへのアクセスを制限する必要があるという要件に遭遇しました。このような要件に遭遇したのは初めてです。その結果、テスト プロセス中に、更新システム権限レポートの使用時にいくつかの問題が見つかりました。具体的なデモンストレーションは次のとおりです。

注意:以下のテスト環境はMySQL 5.6.20です。テスト結果と他のバージョンで相違がある場合は、実際の環境を参照してください。

まず、192.168 セグメントの IP アドレスのみにアクセスを許可するテスト ユーザー LimitIP を作成します。具体的な権限は次のとおりです。

mysql> MyDB.* に対して GRANT SELECT ON を LimitIP@'192.168.%' に、'LimitIP' によって識別されるように許可します。
クエリは正常、影響を受けた行は 0 行 (0.01 秒)
 
mysql> MyDB.kkk に対して LimitIP@'192.168.%' への INSERT、UPDATE、DELETE 権限を許可します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
 
マイSQL> 
mysql> 権限をフラッシュします。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
 
マイSQL> 
 
mysql> LimitIP@'192.168.%' の許可を表示します。
+------------------------------------------------------------------------------------------------------------------------------------------------+
| [email protected].% の許可 |
+------------------------------------------------------------------------------------------------------------------------------------------------+
| パスワード '*72DDE03E02CC55A9478A82F3F4EBE7F639249DEC' で識別される 'LimitIP'@'192.168.%' に *.* の使用権を許可します |
| 'MyDB`.* に対する 'LimitIP'@'192.168.%' への SELECT 権限を付与 |
| 'LimitIP'@'192.168.%' に `MyDB`.`kkk` への挿入、更新、削除権限を許可します |
+--------------------------------------------------------------------------------------------------------------------------------+
セット内の 3 行 (0.00 秒)
 
マイSQL>

ここで、このユーザーは IP アドレス 192.168.103.17 にのみアクセスできるという要件を受け取ったとします。そのため、mysql.user テーブルを次のように更新する予定です。

mysql> mysql.user から user、host を選択します (user='LimitIP' の場合)。
+---------+------------+
| ユーザー | ホスト |
+---------+------------+
| 制限IP | 192.168.% |
+---------+------------+
セット内の 1 行 (0.00 秒)
 
mysql> mysql.user を更新し、host='192.168.103.17' を設定し、user='LimitIP' とします。
クエリは正常、1 行が影響を受けました (0.02 秒)
一致した行: 1 変更された行: 1 警告: 0
 
mysql> 権限をフラッシュします。
クエリは正常、影響を受けた行は 0 行 (0.01 秒)
 
mysql> user='LimitIP' の user から user、host を選択します。
エラー 1046 (3D000): データベースが選択されていません
mysql> mysql を使用します。
テーブル名と列名の補完のためのテーブル情報の読み取り
-Aでこの機能をオフにすると起動が速くなります。
 
データベースが変更されました
mysql> user='LimitIP' の user から user、host を選択します。
+---------+----------------+
| ユーザー | ホスト |
+---------+----------------+
| 制限IP | 192.168.103.17 |
+---------+----------------+
セット内の 1 行 (0.00 秒)
 
mysql> LimitIP@'192.168.103.17' の許可を表示します。
+---------------------------------------------------------------------------------------------------------------------------------------+
| [email protected] への許可 |
+---------------------------------------------------------------------------------------------------------------------------------------+
| パスワード '*72DDE03E02CC55A9478A82F3F4EBE7F639249DEC' で識別される 'LimitIP'@'192.168.103.17' に *.* の使用権を許可します |
+---------------------------------------------------------------------------------------------------------------------------------------+
セット内の 1 行 (0.00 秒)
 
マイSQL>

上記のテストでは、mysql.user テーブルのみを変更すると、以前の権限が失われることがわかりました。以下に示すように、mysql.db と mysql.tables_priv をクエリすると、Host フィールドの値が依然として 192.168.% であることがわかります。

mysql> mysql.db から user='LimitIP'\G を選択して * を実行します。
************************** 1. 行 ****************************
     ホスト: 192.168.%
     データベース: MyDB
     ユーザー: LimitIP
   選択特権: Y
   挿入権限: N
   更新権限: N
   削除権限: N
   作成権限: N
   ドロップ権限: N
   権限付与: N
  参照権限: N
   インデックス権限: N
   権限変更: N
作成_tmp_table_priv: N
  ロックテーブル権限: N
  作成ビュー権限: N
  表示権限: N
 作成ルーチン権限: N
 ルーチン権限の変更: N
   実行権限: N
   イベント特権: N
   トリガー権限: N
セット内の 1 行 (0.00 秒)
 
エラー: 
クエリが指定されていません
 
mysql> mysql.tables_priv から * を選択します。ここで、user='LimitIP'\G;
************************** 1. 行 ****************************
  ホスト: 192.168.%
   データベース: MyDB
  ユーザー: LimitIP
 テーブル名: kkk
 付与者: root@localhost
 タイムスタンプ: 0000-00-00 00:00:00
 Table_priv: 挿入、更新、削除
列の権限: 
セット内の 1 行 (0.00 秒)
 
エラー: 
クエリが指定されていません

そこで、mysql.db テーブルと mysql.tables_priv テーブルの変更を続け、テストして最終的に問題がないことを確認しました (以下のテスト手順を参照してください)。もちろん、アカウントにこれらのレベルを超える権限がある場合は、mysql.columns_priv、mysql.procs_priv などのテーブルも変更する必要がある可能性があります。

mysql> LimitIP@'192.168.%' の許可を表示します。
エラー 1141 (42000): ホスト '192.168.%' のユーザー 'LimitIP' にそのような権限は定義されていません
マイSQL> 
マイSQL> 
mysql> mysql.db を更新し、host='192.168.103.17' を設定し、user='LimitIP' とします。
クエリは正常、1 行が影響を受けました (0.00 秒)
一致した行: 1 変更された行: 1 警告: 0
 
mysql> mysql.tables_priv を更新し、host='192.168.103.17' を設定し、user='LimitIP' とします。
クエリは正常、1 行が影響を受けました (0.00 秒)
一致した行: 1 変更された行: 1 警告: 0
 
mysql> 権限をフラッシュします。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
 
mysql> LimitIP@'192.168.103.17' の許可を表示します。
+---------------------------------------------------------------------------------------------------------------------------------------+
| [email protected] への許可 |
+---------------------------------------------------------------------------------------------------------------------------------------+
| パスワード '*72DDE03E02CC55A9478A82F3F4EBE7F639249DEC' で識別される 'LimitIP'@'192.168.103.17' に *.* の使用権を許可します |
| 'MyDB`.* に対する 'LimitIP'@'192.168.103.17' への SELECT 権限を付与 |
| 'LimitIP'@'192.168.103.17' に `MyDB`.`kkk` への挿入、更新、削除権限を許可します |
+---------------------------------------------------------------------------------------------------------------------------------------+
セット内の 3 行 (0.00 秒)
 
マイSQL>

ユーザーのIP制限を変更する必要がある場合、MySQL関連の権限テーブルを更新するのは最善の解決策ではありません。実際、より良い方法があります。それは、RENAME USER構文です。

mysql> ユーザー 'LimitIP'@'192.168.103.17' の名前を 'LimitIP'@'192.168.103.18' に変更します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
 
mysql> 権限をフラッシュします。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
 
mysql> 'LimitIP'@'192.168.103.18' の権限を表示します。
+---------------------------------------------------------------------------------------------------------------------------------------+
| [email protected] への許可 |
+---------------------------------------------------------------------------------------------------------------------------------------+
| パスワード '*72DDE03E02CC55A9478A82F3F4EBE7F639249DEC' で識別される 'LimitIP'@'192.168.103.18' に *.* の使用権を許可します |
| 'MyDB`.* に対する 'LimitIP'@'192.168.103.18' への SELECT 権限を付与 |
| 'LimitIP'@'192.168.103.18' に `MyDB`.`kkk` への挿入、更新、削除権限を許可します |
+---------------------------------------------------------------------------------------------------------------------------------------+
セット内の 3 行 (0.00 秒)
 
マイSQL>

要約する

上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に少しでもお役に立てれば幸いです。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM をご愛顧いただき、ありがとうございます。

以下もご興味があるかもしれません:
  • MySQL インデックス使用状況監視スキル (収集する価値あり!)
  • 複合主キーと複数列インデックスに遭遇した場合の MySQL 行ロックの詳細な説明
  • MySQLインデックスが使用されない状況のまとめ
  • インデックスは MySQL クエリ条件で使用されますか?
  • MySQL インデックスがソートに与える影響の分析例
  • MySQL パーティションテーブルの制限と制約の詳細な説明
  • MySQLクエリステートメントは、クエリされる行の数を制限するためにlimitを使用します。
  • MySQL接続数が制限を超える問題の解決方法
  • MySQL インデックスの長さ制限の原理の分析

<<:  CocosCreator クラシック エントリー プロジェクト flappybird

>>:  LinuxのバックグラウンドでPythonプログラムを実行するいくつかの方法

推薦する

Node はあいまい検索用の検索ボックスを実装します

この記事の例では、検索ボックスでファジークエリを実装するためのNodeの具体的なコードを参考までに共...

HTML(CSSスタイル仕様)を読む必要があります

CSS スタイル仕様1. クラスセレクター2. タグセレクター3. IDセレクター4. CSSスタイ...

Linux で仮想コンソール セッションをロックする方法

共有システムで作業しているときは、他のユーザーが自分のコンソールを覗き込んで、自分が何をしているか見...

Vueはスライダードラッグ検証機能の全プロセスを実現します

レンダリング 骨組みを定義し、HTMLとCSSを記述するHTML部分 <テンプレート> ...

MySQLでカーソルを宣言する方法

MySQL でカーソルを宣言する方法: 1. 変数とカーソルを宣言する 結果をvarchar(300...

HTMLタグオーバーフロー処理アプリケーション

CSSを使用してスクロールバーを変更する1.コンテンツがオーバーフローした場合のオーバーフロー設定水...

CSS でのフレックスレイアウトの詳細な説明

フレックス レイアウトは、エラスティック レイアウトとも呼ばれます。任意のコンテナーをフレックス レ...

https ウェブサイトを展開し、Nginx でアドレス書き換えを構成するための詳細な手順

Nginx は、高性能な Web サイト サーバーおよびリバース プロキシ サーバーであり、IMAP...

同じドメイン名を持つ Nginx プロキシのフロントエンドとバックエンドの分離プロジェクトの完全な手順

フロントエンド プロジェクトとバックエンド プロジェクトは分離されており、フロントエンドとバックエン...

bashコマンドの使い方の詳細な説明

Linux では、基本的に vi エディタのように「.sh」拡張子を持つテキストの処理と実行を記述す...

Vue はシェイク機能を実装します (ios13.3 以降と互換性があります)

最近、shake.jsを使用して、shakeに似た機能を作成しました。ただし、shake機能はios...

Avue でカスタム検索バーを実装し、検索イベントをクリアする実践

目次1. 検索バーの内容をカスタマイズする2. 検索ボタンをカスタマイズする検索バーをカスタマイズし...

Docker のインストールと構成コマンドのコード例

Dockerのインストール依存パッケージをインストールする sudo yum install -y ...

Vue で動的なスタイルを実現するためのさまざまな方法のまとめ

目次1. 三項演算子の判定2. 動的に設定されるクラス3. 方法判定4. 配列バインディング5. e...

現在のマウススライドの座標を取得するVue+openlayer5メソッド

序文: Vue プロジェクトで現在のマウスの座標を取得するにはどうすればよいでしょうか。ここで共有す...