MySQL 8.0 の新機能の落とし穴と解決策についての簡単な説明 (要約)

MySQL 8.0 の新機能の落とし穴と解決策についての簡単な説明 (要約)

1. ユーザーを作成して承認する

MySQL 8.0 では、ユーザーの作成と認証が以前とは異なります。厳密に言えば、異なるとは言えませんが、より厳格になったとしか言えません。MySQL 8.0 では、認証の前にユーザーの作成とパスワードの設定が必要です。

#まずユーザーを作成します。create user 'hong'@'%' identified by '123123';

#Authorize は、GRANT オプションを使用して、*.* のすべての権限を 'hong'@'%' に付与します。

元の 5.7 メソッドを引き続き使用すると、エラーが報告されます。

'123123' で識別される 'sroot'@'%' に *.* のすべての権限を付与します。

エラー 1064 (42000): SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルで、1 行目の 'identified by '123123'' の近くで使用する正しい構文を確認してください。

2. MySQL 8.0のリモート接続

MySQL 8.0 をインストールした後は、リモートで接続することはできません。これは、MySQL 8.0 がローカルホスト アクセスのみをサポートしているためです。リモートでアクセスできるようにするには、事前に設定する必要があります。

具体的な設定手順は以下のとおりです。

①MySQLにログインする

実行コマンドは、mysql -u root -pです。

Enterキーを押した後にパスワードを入力してください

② MySQLデータベースを選択

実行コマンドは次のとおりです: use mysql;

MySQL データベース内のユーザー情報を保存するユーザー テーブルを表示します。

③mysqlデータベースのユーザーテーブルで現在のルートユーザーの関連情報を表示する

実行コマンドは次のとおりです: select host,user,authentication_string,plugin from user;

コマンドを実行すると、表が表示されます。デフォルトでは、root ユーザーのホストは localhost であり、ローカル アクセスのみがサポートされ、リモート アクセスは許可されていないことを示しています。

④ ホストのデフォルト設定を変更する

実行コマンドは次のとおりです: update user set host='%' where user='root';

⑤ リフレッシュ

実行コマンドは次のとおりです: 権限をフラッシュします。

これですべてだと思っていましたが、Navicat を使用して MySQL にリモート接続すると、エラーを示すポップアップ ウィンドウが表示されました。


その理由は、mysql8 より前のバージョンの暗号化ルールは mysql_native_password であり、mysql8 以降のバージョンの暗号化ルールは caching_sha2_password であるためです。この問題を解決するには 2 つの方法があります。1 つは navicat ドライバーをアップグレードすること、もう 1 つは mysql ユーザー ログイン パスワードの暗号化ルールを mysql_native_password に復元することです。私は 2 番目の方法を使用します。

ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #暗号化ルールを変更する
 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password'; #ユーザーのパスワードを更新 FLUSH PRIVILEGES; #権限を更新

問題は解決しました。

mysql8.0 ユーザパスワード設定に関する注意事項

MySQL 8.0.11 では、mysql_native_password の代わりに caching_sha2_password がデフォルトの認証プラグインになります。この変更がサーバー操作およびクライアントやコネクタとのサーバー互換性にどのように影響するかについては、優先認証プラグインとしての caching_sha2_password を参照してください。 (https://dev.mysql.com/doc/refman/8.0/en/caching-sha2-pluggable-authentication.html から翻訳)

今日、新しいサービスにmysql8.0.11を設定してインストールするときに、いつものようにmysqlのパスワードを設定しました。設定が成功した後、シェルでmysql -u root -pと入力し、通常通りパスワードを入力します。しかし、phpmyadminまたはhttp://php.net/manual/zh/mysqli.real-connect.phpで接続を直接使用すると、接続できないというメッセージが表示されます。具体的なエラーメッセージは次のとおりです。

mysqli_real_connect(): サーバーがクライアントに不明な認証方法を要求しました [sha256_password]

検索して公式ドキュメントを見つけた後、バージョン 8.0.11 以降、ユーザー パスワードを設定するためのデフォルトの検証方法は、MySQL 5.7 以前のバージョンのように caching_sha2_password ではなくなったことがわかりました。MySQL 8.0.11 にアップグレードした後、元のプログラムが MySQL に接続できない場合は、MySQL コマンドライン クライアントで次のコマンドを使用して、MySQL 5.7 以前のバージョンのパスワード検証方法にすばやく設定できます。同時に、MYSQL 8.0.11 でのパスワードの変更方法も元の方法とは少し異なり、元のパスワード変更コマンドの一部は MySQL 8.0.11 では使用できません。

> MySQLを使用する 

> ALTER USER 'root'@'localhost' を 'your password' によって mysql_native_password で識別します。 

> 権限のフラッシュ; 

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL 8.0 に移行する際の注意点 (要約)
  • MySQL 8.0.20でNavicatをインストールして接続する方法と注意すべき点
  • JDBC を使用して Mysql 8.0.11 に接続するときに発生するさまざまなエラーを解決する方法
  • MySQL 8.0の落とし穴の詳細な説明
  • MySql 8.0 と対応するドライバー パッケージの一致に関する注意事項

<<:  Angularの動的コンポーネントの詳細な説明

>>:  Nginxの現在の制限設定の詳細な説明

推薦する

ウェブページ HTML 特殊記号 HTML 特殊文字比較表

特殊記号名前付きエンティティ10進数エンコード特殊記号名前付きエンティティ10進数エンコードアルファ...

MySQL ステートメントを使用した簡単な追加、削除、変更、クエリ操作の例

この記事では、例を使用して、MySQL ステートメントを使用して、単純な追加、削除、変更、およびクエ...

MySQL に 1,000 万件のレコードを素早く挿入する方法

面接で「MySQL に 1,000 万件のレコードをすばやく挿入するにはどうすればよいか」という質問...

CSS3でシャトル星空のアニメーションを実現

結果: html <canvas id="スターフィールド"><...

CSS 垂直センタリングの代替実装コードの詳細な説明(非従来型)

序文ご存知のとおり、「CSS で要素を垂直方向に中央揃えするにはどうすればよいか」という質問は、すで...

iframe タグの使用方法の詳細な説明 (属性、透明度、適応高さ)

1. iframe の定義と使用法iframe 要素は、別のドキュメントを含むインライン フレーム...

MySQL InnoDBとMyISAMの違いを簡単に理解する

序文MySQL は、myisam、innodb、memory、archive、example など、...

MySQL マルチバージョン同時実行制御メカニズム (MVCC) ソースコードの詳細な説明

目次1. はじめに2. MVCC (マルチバージョン同時実行制御メカニズム) 2.1 繰り返し読み取...

Vue ブラウザログアウトの実装例

目次1. beforeunload イベント2. アンロードイベント3. ソースコードプロジェクトの...

Vue が学ぶべき知識ポイント: forEach() の使用

序文フロントエンド開発では、目的のコンテンツを取得するためにループをトラバースする必要がある状況に頻...

XHTML の珍しいが便利なタグ

Xhtml には、あまり使用されないが非常に便利なタグが多数あります。半分の労力で 2 倍の結果を達...

Vue の要素カレンダー コンポーネントを使用したサンプル コード

まず効果図を見てみましょう: 完全なコードは添付されています <テンプレート> <...

LinuxにNginxをインストールする詳細な手順

1. Nginxのインストール手順1.1 公式サイトの紹介http://nginx.org/en/d...

MySQLクエリの文字セットの不一致の問題を解決する方法

問題を見つける最近、仕事で問題が発生しました。MySQL データベースにテーブルを作成するときに、ラ...

js 配列から重複を削除する 11 の方法

実際の業務や面接では、「配列の重複排除」の問題によく遭遇します。以下は、js を使用して実装された配...