root
のパスワードを設定しようとしました。私が実行すると:
mysql> SELECT * from mysql.user where User="root";
それが示している:
+-----------+------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-----------------------+------------------+-----------------------+-------------------+----------------+
| Host | User | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Create_user_priv | Event_priv | Trigger_priv | Create_tablespace_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections | max_user_connections | plugin | authentication_string | password_expired | password_last_changed | password_lifetime | account_locked |
+-----------+------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-----------------------+------------------+-----------------------+-------------------+----------------+
| localhost | root | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | | | | 0 | 0 | 0 | 0 | mysql_native_password | | N | 2018-06-13 15:11:59 | NULL | N |
+-----------+------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-----------------------+------------------+-----------------------+-------------------+----------------+
これ Document は、
Mysql_native_passwordネイティブ認証プラグインは下位互換性があります。認証プラグインをサポートしない古いクライアントはネイティブ認証プロトコルを使用するため、プラグイン可能な認証をサポートするサーバーに接続できます。
しかし、技術的に私は多くを手に入れていません。 root
ユーザーパスワードを使用して何かをする必要がありますか?
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<password>';
そして
ALTER USER 'root'@'localhost' IDENTIFIED BY '<password>';
違いはありますか?
MySQLは長い間、さまざまな authentication plugins をサポートしてきました。これは、基本的にプログラム可能なコードの一部であり、mysqlアカウントが要求されているかどうかを示しています。
これを行う元の方法は、パスワードを設定し、特定の方法でハッシュして、mysql.userテーブルに格納することです。ただし、これは認証できる唯一の方法ではありません。次に例を示します。
caching_sha2_password
)、理論的にはより安全です(そうは言っていませんが、デフォルトの「ネイティブ」の方がかなり悪かったのは確かです)。ただし、クライアントドライバーとアプリケーションの更新が必要な場合があるため、いつでも元に戻すことができます互換性の理由から古いものに。「エンタープライズ」の世界では、ユーザーとパスワード以外にも、非常に特殊な認証方法が特別に必要になることがよくあります。
基本的に、mysql_native_passwordは従来の認証方法であり、非常に安全ではありません(パスワードのハッシュのみを使用します)が、古いドライバーと互換性があります。 新しいmysqlサービスを開始する場合は、start(およびTLS)から新しいプラグインを使用することをお勧めします。 特別なニーズがある場合は、他の方法を使用できます-特定の特別なニーズがある場合はプログラムすることもできます)。
ユーザーごとに異なる方法を選択できます-たとえば、通常のアプリケーションはmysql_native_passwordまたは新しいsha2を使用できますが、管理者アカウントは2要素認証トークンを使用し、mysqlサーバーで統計情報を収集する監視ユーザーにはunix_socketを使用します。これらの他の認証方法は、ネイティブのものと同様に、mysql.userテーブルのパスワードフィールドを使用する場合と使用しない場合があります(パスワードを別の場所に保存するか、パスワードの概念さえない場合があります!)。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<password>';
そして
ALTER USER 'root'@'localhost' IDENTIFIED BY '<password>';
Mysql_native_passwordは基本的に同じで、通常はデフォルトの認証方法です。 WITH
を使用すると、使用する方法を決定できます。たとえば、GRANT USAGE ON *.* TO root@localhost IDENTIFIED WITH socket_auth
、UNIXソケット認証を使用するようにそのユーザーを設定しています。 MariaDBは少し異なる構文を使用します:VIA unix_socket
。これらのコマンドを実行すると、主にmysql.userテーブルが更新されます。
注ALTER
/GRANT
は次のユーザーログイン時に自動的に機能しますが、UPDATE
ingを直接実行すると、mysql.userテーブルにFLUSH PRIVILEGES
、および特定のシナリオ(ガレラなど)でいくつかの問題があります。