このガイドでは、MySQLrootユーザーの認証方法をSHA-2プラガブル認証のキャッシュに変更する理由と方法について説明します。 またはネイティブプラガブル認証 Ubuntuのメソッド。
はじめに
MySQLルートのセットアップパスワードをお持ちの場合でも ユーザー、データベースサーバーでrootとして認証することはできません パスワードを持つユーザー。これは、MySQLのrootユーザーが auth_socketを使用して認証するように設定されているためです。 MySQL5.7以降のバージョンを実行しているUbuntuシステムのパスワードの代わりにデフォルトでプラグイン。したがって、rootユーザーとそのパスワードを使用してMySQLサーバーにアクセスすることはできません。
コマンドを使用してrootユーザーとして認証しようとしても:
$ mysql -u root -p
次のエラーメッセージが表示されます:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
auth_socket プラグインは、ソケットユーザー名(オペレーティングシステムのユーザー名)が、クライアントプログラムによってサーバーに指定されたMySQLユーザー名と一致するかどうかを確認します。
このプラグインは気にせず、パスワードも必要ありません。ユーザーがUNIXソケットを使用して接続しているかどうかを確認し、ユーザー名を比較するだけです。
プラグインは、オペレーティングシステムのユーザー名とMySQLのユーザー名が同じであることを検出すると、それ以上の認証なしで接続を許可します。
たとえば、ostechnixというユーザーがいる場合 オペレーティングシステムでは、'ostechnix'@'localhost'にログインできます。 Unixソケット認証が定義された認証メカニズムである場合は、MySQL内のアカウント。オペレーティングシステムのユーザー名がMySQLユーザー名と異なる場合、auth_socket プラグインは単に接続を拒否します。
auth_socket プラグインはセキュリティを向上させますが、phpMyAdminなどの外部プログラムを使用してデータベースサーバーにアクセスする場合も複雑になります。
また、auth_socketによって認証されたユーザー プラグインは、Unixソケットファイルを介してローカルホストからのみ接続できます。リモート接続は制限されています。これが、UbuntuでMySQLrootユーザーの認証方法を変更する必要がある理由です。
1。 UbuntuのMySQLルートユーザーの認証方法を変更する
MySQLは、多くの認証メソッドとそれらのメソッドを実装するプラグインを提供します。このガイドでは、 caching_sha2_passwordと呼ばれる2つのプラグインについてのみ説明します。 およびmysql_native_password SHA-2プラガブル認証のキャッシュと呼ばれるメソッドを実装します およびネイティブプラガブル認証 それぞれ。
まず、MySQLrootユーザーの認証方法をcaching_sha2_passwordに変更する方法を説明します。 。
1.1。認証プラグインをcaching_sha2_passwordに変更します
caching_sha2_password プラグインは、SHA-256パスワードハッシュを使用して認証を実行します。 MySQL 8.0では、caching_sha2_password mysql_native_passwordではなくデフォルトの認証プラグインです 。より安全なパスワード暗号化、より高速な認証、およびより優れたパフォーマンスを提供します。
認証プラグインを変更するには、次のコマンドを使用してMySQLサーバーにログインします。
$ sudo mysql
MySQL8はauth_socketを使用するため Ubuntuのプラグインの場合、上記のコマンドを使用すると、MySQLサーバーにrootとしてログインできます。 ユーザー。 sudoを入力してください 認証するためのパスワード。
次に、MySQLプロンプトで次のコマンドを実行して、すべてのmysqlユーザーアカウントの現在の認証方法を見つけます。
mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
出力例:
mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$||#WR:(W'NSP>|b2
yXI9EfAeI6vnIj8I.Pwvw6Gx6V9bzVce9oTbN212V12 | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| root | | auth_socket | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
5 rows in set (0.01 sec)
ご覧のとおり、MySQLのrootユーザーはauth_socketを使用しています 認証用のプラグイン。 auth_socketを変更しましょう caching_sha2_passwordへのプラグイン ALTER USERを使用したプラグイン 以下のようなコマンド。
VALIDATE PASSWORDを有効にしている場合は注意してください MySQLルートユーザーパスワードを設定する際のプラグインでは、現在のパスワードポリシーに基づいて強力なパスワードを入力する必要があります。強力なパスワードは、大文字、小文字、数字、特殊文字を含む8文字以上で構成する必要があります。
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'Password123#@!';
Password123#@!を置き換えます 上記のコマンドで、選択した強力で一意のパスワードを使用し、後で必要になるときに書き留めておきます。
次に、コマンドを使用して変更を更新します:
mysql> FLUSH PRIVILEGES;
次に、コマンドを使用して、現在の認証プラグインが変更されているかどうかを確認します。
mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
出力例:
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$||#WR:(W'NSP>|b2
yXI9EfAeI6vnIj8I.Pwvw6Gx6V9bzVce9oTbN212V12 | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| root | $A$005$z9Lq/%(r l
+DDI9wJbql8DWZNRoet2BSwUrIgjq.l7FxRSyMb/OWk4 | caching_sha2_password | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)
MySQLrootユーザーの認証方法はCachingSHA-2PluggableAuthenticationに設定されています。今後、MySQLのrootユーザーはパスワードを使用して認証できるようになります。
mysqlプロンプトを終了します:
mysql> exit
MySQLのrootユーザーがパスワードでログインできるかどうかを確認するには、次のコマンドを入力します。
$ mysql -u root -p
MySQLのrootユーザーのパスワードを入力します:
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 11 Server version: 8.0.25-0ubuntu0.20.04.1 (Ubuntu) Copyright (c) 2000, 2021, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
caching_sha2_passwordにもかかわらず プラグインは、強化された安全な暗号化とより優れたパフォーマンスを提供します。既存のMySQLインストールとの互換性の問題があり、一部のPHPバージョンで問題が発生します。詳細については、このリンクを参照してください。 。
互換性の問題が発生した場合、またはクライアントまたはコネクタがcaching_sha2_passwordをサポートしていない場合 認証プラグイン、ネイティブ認証方法に戻します。つまり、mysql_native_password 次のセクションで説明します。
1.2。認証プラグインをmysql_native_passwordに変更します
MySQLにはmysql_native_passwordが含まれています ネイティブのプラグイン可能な認証方法を実装するプラグイン。パスワードハッシュ方式に基づく認証を提供します。
mysql_native_password 以前のMySQLバージョンではデフォルトの認証方法でした。
mysql_native_passwordに変更するには プラグイン、rootとしてMySQLにログインします ユーザー:
$ mysql -u root -p
auth_socketを使用している場合 プラグインの場合、次のコマンドを入力して、rootとしてMySQLサーバーにログインする必要があります。 ユーザー:
$ sudo mysql
mysql_native_passwordを設定するには MySQLルートユーザーのデフォルト認証としてプラグインを使用するには、MySQLプロンプトで次のコマンドを実行します。
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Password123#@!';
コマンドを使用して変更を更新します:
mysql> FLUSH PRIVILEGES;
次に、コマンドを使用して認証方法が変更されているかどうかを確認します。
mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
出力例:
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$||#WR:(W'NSP>|b2
yXI9EfAeI6vnIj8I.Pwvw6Gx6V9bzVce9oTbN212V12 | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| root | *B6032809F2C8CE37BDF05DEFE5BA30D6DC74DC68 | mysql_native_password | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)
終わり! MySQLrootユーザーの認証方法をNativePluggableAuthenticationに変更しました。
結論
このガイドでは、MySQL5.7以降のバージョンを実行しているUbuntuシステムでMySQLrootユーザーの認証方法を変更する必要がある理由について説明しました。 auth_socketを変更する方法も確認しました caching_sha2_passwordへのプラグイン またはmysql_native_password UbuntuオペレーティングシステムのMySQLrootユーザー用のプラグイン。
関連記事:
- UbuntuLinux上のMySQL8でrootパスワードをリセットする方法