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プログラムを実行するいくつかの方法

推薦する

MySQLデータベースとOracleデータベース間のバックアップをインポートする

OracleデータベースからエクスポートされたデータをMySqlデータベースにインポートします。 1...

Webpack-cliが正常にインストールされたら、詳細についてはwebpack -vエラーケースを確認してください。

目次質問1. webpack webpack-cliをインストールする2. webpackのバージョ...

CSSはボックスコンテナ(div)の高さを常に100%に設定します。

序文ブラウザをどのようにズームしても、ボックス コンテナーの高さを常に 100% に保つ必要がある場...

HTMLウェブページのMETAタグのコンテンツを書く際のポイント

META タグは、HTML 言語のヘッダー領域にある補助タグです。作成者、日時、Web ページの説明...

MySQLデータ行と行オーバーフローのメカニズムの詳細な説明

1. 行の形式は何ですか? MySQL の行形式の設定は次のように表示されます。 実際、MySQL ...

不規則な投影を実現するためのボックスシャドウとドロップシャドウのサンプルコード

border-radius で生成できる四角形やその他の図形に影を追加する場合 (「Adaptive...

オブジェクト内のフィールドを削除する js メソッド

この記事では主に、オブジェクト内のフィールドを削除するための js の実装を紹介し、次のように共有し...

MacOS Catalina アップグレード後の VMware ブラック スクリーン問題に対する完璧な解決策の詳細な説明

MacOS Catalina アップグレード後の VMware ブラック スクリーンに対する完璧なソ...

Vue 構成リクエストの複数サーバーソリューションの詳細な説明

1. 解決策1.1 インターフェースコンテキストパスの説明2 つのバックエンド インターフェイス サ...

HTMLは読み取り専用のテキストボックスを実装しており、コンテンツを変更することはできません。

さっそく、コードを直接投稿します。具体的なコードは次のとおりです。 <!--方法 1: onf...

ネイティブ JS オブジェクト指向タイピング ゲーム

この記事では、JSオブジェクト指向タイピングゲームの具体的なコードを参考までに紹介します。具体的な内...

CSS トランジションを使用した円形ホバー効果のサンプルコード

この記事では ソースコードのオンラインプレビューとダウンロード今日のチュートリアルでは、円のホバー効...

遭遇したいくつかのブラウザ互換性の問題について簡単に説明します

背景ブラウザの互換性の問題を解決するのは非常に面倒なことです。高度な技術はそれほど必要ありませんが、...

航空機戦争ゲームを実装するためのネイティブJS

この記事の例では、参考のために航空機戦争ゲームを実装するためのJSの具体的なコードを共有しています。...

React Native環境のインストールプロセス

react-native インストールプロセス1.npx react-native init Awe...