--データベースに接続するとき、ホストとユーザーのマッチングルール 公式ドキュメント: https://dev.mysql.com/doc/refman/5.7/en/connection-access.html --ホストとユーザーの一致ルールは次のとおりです。--ホストが明確な場合は、最初に一致します。ホストが % で曖昧な場合は、最後に一致します。ただし、ホストが '' (空) の場合は、% の後に一致します。 --ホストが同じ場合、明確な名前を持つユーザーが最初に一致し、'' (空) を持つユーザーが最後に一致します。 --ホストとユーザーが同じ場合、ソートは不確実です 複数の一致が考えられる場合、サーバーはどれを使用するかを決定する必要があります。この問題は次のように解決されます。 サーバーはユーザー テーブルをメモリに読み込むたびに、行をソートします。 クライアントが接続を試みると、サーバーはソートされた順序で行を検索します。 サーバーは、クライアントのホスト名とユーザー名に一致する最初の行を使用します。 サーバーは、最も具体的な Host 値を持つ行を最初に並べる並べ替えルールを使用します。リテラルのホスト名と IP アドレスが最も具体的です。(リテラル IP アドレスの具体性は、ネットマスクがあるかどうかによって影響されないため、198.51.100.13 と 198.51.100.0/255.255.255.0 は、同様に具体性が高いと見なされます。) パターン '%' は「任意のホスト」を意味し、具体性が最も低いです。空の文字列 '' も「任意のホスト」を意味しますが、'%' の後に並べ替えられます。同じ Host 値を持つ行は、最も具体的な User 値が最初に並べられます (空の User 値は「任意のユーザー」を意味し、具体性が最も低いです)。同様に具体性の高い Host 値と User 値を持つ行の場合、順序は非決定的です。 --現在のホストとユーザー情報のマッチング順序を確認します。最初にホスト順序のマッチング、次にユーザー順序のマッチングを行います。 mysql> SELECT authentication_string、host、user、account_locked FROM mysql.USER ORDER BY host desc 、user desc; +------------------------------------------+--------------+--------------+--------------+----------------- | 認証文字列 | ホスト | ユーザー | アカウントロック | +------------------------------------------+--------------+--------------+--------------+----------------- | *511C0A408C5065XXEC90D60YYA1AB9437281AF28 | ローカルホスト | ルート | N | | *THISISNOTAVALIXXASSWORDYYATCANBEUSEDHERE | localhost | mysql.sys | Y | | *THISISNOTAVALIXXASSWORDYYATCANBEUSEDHERE | localhost | mysql.session | Y | | *485CE31BA547A4XXC047659YY10DF200F361CD4E | ローカルホスト | bkpuser | N | | *7B502777D8FF69XX4B56BC2YY2867F4B47321BA8 | 192.168.56.% | 再現 | N | | *AECCE73463829AXX3968838YYF6F85E43C3F169C | % | フライリモート | N | | *566AC8467DAAAEXXE247AE7YY0A770E9B97D9FB0 | | フライローカル | N | +------------------------------------------+--------------+--------------+--------------+----------------+ セット内の行数は 8 です (0.00 秒) --特別な例を挙げてみましょう。 -- 次のように 2 つの特別なユーザーを作成します。1 つはユーザー名が '' (空)、もう 1 つはユーザー名とホストが両方とも '' (空) です。 mysql> 「Kong123$」で識別される ''@'localhost' ユーザーを作成します。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) mysql> 「doubleKong123$」で識別されるユーザー ''@'' を作成します。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) --現在のホストとユーザー情報のマッチング順序を確認します。最初にホスト順序のマッチング、次にユーザー順序のマッチングを行います。 mysql> SELECT authentication_string、host、user、account_locked FROM mysql.USER ORDER BY host desc 、user desc; +------------------------------------------+--------------+--------------+--------------+----------------+ | 認証文字列 | ホスト | ユーザー | アカウントロック | +------------------------------------------+--------------+--------------+--------------+----------------- | *511C0VVV8C5065CBEC90D6TTTT1AB9437281AF28 | ローカルホスト | ルート | N | | *THISIVVVTAVALIDPASSWORTTTTTCANBEUSEDHERE | localhost | mysql.sys | Y | | *THISIVVVTAVALIDPASSWORTTTTTCANBEUSEDHERE | localhost | mysql.session | Y | | *485CEVVVA547A48CC04765TTTT0DF200F361CD4E | ローカルホスト | bkpuser | N | | *256D7VVV91F7363EBDADEFTTTTB74B2B318746FC | ローカルホスト | | N | | *7B502VVVD8FF69164B56BCTTTT867F4B47321BA8 | 192.168.56.% | 再現 | N | | *AECCEVVV63829A5F396883TTTT6F85E43C3F169C | % | フライリモート | N | | *566ACVVV7DAAAE79E247AETTTTA770E9B97D9FB0 | | フライローカル | N | | *AE162VVV68403D1D98A4C9TTTT50A508B8C56F3F | | | N | +------------------------------------------+--------------+--------------+--------------+----------------- セット内の行数は 9 です (0.00 秒) --この方法では、flyremote ユーザーにローカルでログインするときにエラーが報告されます。これは、上記の順序では、flyremote ユーザーではなく、ホスト localhost とユーザー '' (空) のユーザーが最初に一致するためです (ユーザー '' (空) のユーザーは任意のユーザー名と一致する可能性があるため)。 [root@hostmysql-m mysql]# mysql -uflyremote -pFlyremote123$ mysql: [警告] コマンドライン インターフェイスでパスワードを使用すると安全でない可能性があります。 エラー 1045 (28000): ユーザー 'flyremote'@'localhost' のアクセスが拒否されました (パスワード使用: YES) --つまり、flyremoteユーザーにローカルでログインする場合、一致するホストをlocalhost、ユーザーを''(空)、パスワードをKong123$として正常にログインできます。 [root@hostmysql-m mysql]# mysql -uflyremote -pKong123$ mysql: [警告] コマンドライン インターフェイスでパスワードを使用すると安全でない可能性があります。 MySQL モニターへようこそ。コマンドは ; または \g で終わります。 MySQL接続IDは15です サーバーバージョン: 5.7.23-log MySQL コミュニティサーバー (GPL) Copyright (c) 2000, 2018, Oracle およびその関連会社。無断複写・転載を禁じます。 OracleはOracle Corporationおよびその関連会社の登録商標です。 その他の名称は各社の商標である場合があります。 所有者。 ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。 --現在のユーザー接続方法と現在のユーザー認証方法を表示します mysql> ユーザー()、CURRENT_USER() を選択します。 +---------------------+----------------+ | ユーザー() | CURRENT_USER() | +---------------------+----------------+ | flyremote@localhost | @localhost | +---------------------+----------------+ セット内の1行(0.06秒) --IPをインポートしてflyremoteユーザーにログインする場合、IPが%と一致し、ユーザーがflyremoteと一致すると問題はありません。 [root@hostmysql-m mysql]# mysql -uflyremote -pFlyremote123$ -h127.11.22.33 mysql: [警告] コマンドライン インターフェイスでパスワードを使用すると安全でない可能性があります。 MySQL モニターへようこそ。コマンドは ; または \g で終わります。 MySQL接続IDは12です サーバーバージョン: 5.7.23-log MySQL コミュニティサーバー (GPL) Copyright (c) 2000, 2018, Oracle およびその関連会社。無断複写・転載を禁じます。 OracleはOracle Corporationおよびその関連会社の登録商標です。 その他の名称は各社の商標である場合があります。 所有者。 ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。 マイSQL> --現在のユーザー接続方法と現在のユーザー認証方法を表示します mysql> ユーザー()、CURRENT_USER() を選択します。 +------------------------+----------------+ | ユーザー() | CURRENT_USER() | +------------------------+----------------+ | [email protected] | flyremote@% | +------------------------+----------------+ セット内の 1 行 (0.00 秒) --任意のユーザー、任意のホスト、パスワードが作成された2番目の空のユーザーと空のホスト「doubleKong123$」のパスワードと一致している限り、mysqlに入力できます。 --存在しないユーザーをテストするハハハ [root@hostmysql-m ~]# mysql -uhahaha -pdoubleKong123$ -h127.11.22.33 mysql: [警告] コマンドライン インターフェイスでパスワードを使用すると安全でない可能性があります。 MySQL モニターへようこそ。コマンドは ; または \g で終わります。 MySQL接続IDは6です サーバーバージョン: 5.7.23-log MySQL コミュニティサーバー (GPL) Copyright (c) 2000, 2018, Oracle およびその関連会社。無断複写・転載を禁じます。 OracleはOracle Corporationおよびその関連会社の登録商標です。 その他の名称は各社の商標である場合があります。 所有者。 ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。 マイSQL> --現在のユーザー接続方法と現在のユーザー認証方法を表示します mysql> ユーザー()、CURRENT_USER() を選択します。 +---------------------+----------------+ | ユーザー() | CURRENT_USER() | +---------------------+----------------+ | ハハハ@127.11.22.33 | @ | +---------------------+----------------+ セット内の1行(0.01秒) - 解決:1. セキュリティを確保するために、空のユーザーと空のホストユーザーを手動で削除します。 または 2. セキュリティ設定にはmysql_secure_installationを使用する --セキュリティ構成は以下のとおりです。匿名ユーザーの削除操作も含まれます このプログラムを使用すると、次の方法で MySQL インストールのセキュリティを強化できます。 ルートアカウントのパスワードを設定できます。 ローカル ホストの外部からアクセス可能なルート アカウントを削除できます。 匿名ユーザー アカウントを削除できます。 テスト データベース (デフォルトでは匿名ユーザーも含めすべてのユーザーがアクセスできます) と、名前が test_ で始まるデータベースに誰でもアクセスできるようにする権限を削除できます。 -- 次のようにして、匿名ユーザーのソース コード mysql_secure_installation.cc を削除します。 //匿名ユーザーを削除する 匿名ユーザーを削除します。 /** セキュリティを強化するために、すべての匿名ユーザーを削除します。 */ void 匿名ユーザーを削除します。 { 応答の整数; reply = get_response((const char *) "デフォルトでは、MySQL インストールには " 「匿名ユーザー、\n誰でもログインできます」 「ユーザーなしでMySQLに\na」 「彼らのためにアカウントが作成されました。これは意図されたものです」 「テストのためだけに、そして「 「インストールが少しスムーズになります。\nそうすべきです」 "本番環境に移行する前に削除してください\n" "環境\n\n匿名ユーザーを削除しますか? " "(はいの場合は y|Y を、いいえの場合は他のキーを押してください): ", 'y'); if (返信 == (int) 'y' || 返信 == (int) 'Y') { const char *クエリ; クエリ = "USER、HOST FROM mysql.user WHERE USER = ''"; if (!execute_query(&query, strlen(query))) DBUG_PRINT("info", ("クエリ成功!")); MYSQL_RES *結果 = mysql_store_result(&mysql); (結果)の場合 drop_users(結果); mysql_free_result(結果); fprintf(stdout, "成功。\n\n"); } それ以外 fprintf(stdout, "\n ... スキップします。\n\n"); } 補足: MySQL ユーザーテーブル内の複数のホストのマッチングルール MySQL データベースのユーザー テーブルのホスト フィールドは、データベースにアクセスするためのユーザーの「権限」を制御するために使用されます。 すべてのネットワーク セグメントを示すには、「%」を使用できます。 特定の IP アドレスを使用することもできます。その場合、その IP アドレスを持つクライアントだけが MySQL サーバーにログインできるようになります。 あいまい一致に「_」を使用することもできます。これは、特定のネットワーク セグメント内のクライアントが MySQL サーバーにログインできることを示します。 ユーザー テーブルに、ユーザーに対して異なるホスト値を持つ 2 つのレコードがある場合、MySQL サーバーはどのようにしてユーザーの権限を一致させるのでしょうか? mysql が使用する戦略は、サーバーがユーザー テーブルを読み取るときに、最初に最も具体的なホスト値 (ホスト名と IP 番号が最も具体的) で並べ替えることです。同じホスト値を持つエントリは、最も具体的なユーザーと最初に一致します。 例:以下に示すように、root ユーザーは 2 人いるので、localhost の root クライアントだけが mysql サーバーにログインできます。 | ルート | ローカルホスト | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | | ルート | % | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | 上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。 以下もご興味があるかもしれません:
|
<<: HTML テーブル マークアップ チュートリアル (29): セルのライト境界線の色属性 BORDERCOLORLIGHT
>>: Docker のタイムゾーンの問題とデータ移行の問題
デフォルトでは、MySQL は日付に 0 値を挿入することを受け入れますが、実際には日付の 0 値に...
主に使用される知識ポイント: •css3 3D変換 •ネイティブjsマウスドラッグイベント•表示:グ...
123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...
目次1. ユニットテストはなぜ必要なのでしょうか? 2. ユニットテストの書き方3. テストツール4...
JS には、文字列をインターセプトするための 3 つのメソッド、 slice() 、 substri...
目次アレイ重複排除1 2層forループ(バブルソートの2層ループ記述に類似) 2 ループとインデック...
フロントエンドのデザイン案では、「X」や「>」の形をした閉じるボタンや、他の 3 方向の白抜き...
Ubuntu 16.04 はデフォルトで PHP7.0 環境をインストールしますが、PHP7 は一部...
目次1. 仮想マシンをダウンロードする2. 仮想マシンのインストールVMware のダウンロードとイ...
<br /> 英語原文: http://desktoppub.about.com/od/...
歴史的な理由により、MySQL レプリケーションは、REDO ログではなく論理バイナリ ログに基づい...
序文最近、私はクライアントのサーバー構成を支援しており、Nginx 構成ファイルを頻繁に変更していま...
導入Docker-Compose プロジェクトは、Docker コンテナ クラスターの迅速なオーケス...
インデックス定義: ディスク上に保存される個別のデータベース構造であり、データ テーブル内のすべての...
序文これまでの Tomcat シリーズの記事を通じて、私のブログを読んでいる学生は Tomcat に...