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

推薦する

CSS が最初のサイクルで画像を読み込むために @keyframes を使用するときに発生するホワイトギャップの問題 (フラッシュ画面) をすばやく解決します。

問題の説明: CSS アニメーション プロパティを使用すると、ループが最初に読み込まれたときに白いギ...

springcloud alibaba nacos linux 設定の詳細なチュートリアル

まず、github から nacos の圧縮パッケージをダウンロードします: https://git...

Docker クロスサーバー通信オーバーレイソリューション (パート 1) Consul 単一インスタンス

目次シナリオタスクアイデア分析するコンセプトと選択ちょっとしたテスト環境説明予防実践テスト引用シナリ...

フロントエンドコンポーネント化の基礎知識を詳しく解説

目次コンポーネントの基本概念オブジェクトとコンポーネントの違い成分属性属性とプロパティ属性:財産:ク...

実行中のDockerコンテナのポートマッピングを変更する方法

序文docker run がコンテナを作成して実行するときに、-p を使用してポート マッピング ル...

Docker が占有するディスク領域をクリーンアップする方法

Docker は多くのスペースを占有します。コンテナを実行したり、イメージを取得したり、アプリケー...

Vue で棒グラフを使用し、自分で設定を変更する方法

1. HTMLファイルでechartをインポートする <!-- echarts をインポート ...

MySQL 5.7.17 のインストールと使用方法のグラフィックチュートリアル

MySQL は、スウェーデンの会社 MySQL AB によって開発され、現在は Oracle が所有...

VMware ワークステーションの仮想マシンの互換性の問題に対する解決策

VMware ワークステーションの仮想マシンの互換性の問題を解決するにはどうすればよいですか?ノート...

HTML スクロールバーのテキストエリア属性の設定

1.オーバーフローコンテンツのオーバーフロー設定(設定されたオブジェクトにスクロールバーを表示するか...

ViteでReactプロジェクトを構築する方法

目次序文Viteプロジェクトを作成する改修プロジェクトディレクトリの規則その他の構成序文毎日鳩、火ば...

MySQL binlog の使用方法の詳細な説明

binlog は、MySQL のすべての DML 操作を記録するバイナリ ログ ファイルです。 bi...

クロスブラウザ開発体験のまとめ(I)HTMLタグ

ページにDOCTYPEを追加するブラウザによってタグやスタイルシートの解釈が異なるため、さまざまなブ...

MySQLが大量のデータを処理する際にクエリ速度を最適化するいくつかの方法

実際に参加したプロジェクトでは、MySQL テーブルのデータ量が数百万に達すると、通常の SQL ク...

MySQLの外部結合と内部結合クエリの違い

外部結合の構文は次のとおりです。フィールド名を選択FROM テーブル名 1 LEFT|RIGHT|F...