MySQL v5.7 を使用して MySQL の「root」パスワードを変更するにはどうすればいいですか?

MySQL v5.7 を使用して MySQL の「root」パスワードを変更するにはどうすればいいですか?

現在の環境:

mysql> show variables like "%version%";
+-------------------------+------------------------------+
| Variable_name           | Value                        |
+-------------------------+------------------------------+
| innodb_version          | 5.7.13                       |
| protocol_version        | 10                           |
| slave_type_conversions  |                              |
| tls_version             | TLSv1,TLSv1.1                |
| version                 | 5.7.13                       |
| version_comment         | MySQL Community Server (GPL) |
| version_compile_machine | x86_64                       |
| version_compile_os      | Linux                        |
+-------------------------+------------------------------+
8 rows in set (0.01 sec)

パスワード変更コマンドユーザー:

mysql> update user set password=PASSWORD("XXXX") where user="root";
ERROR 1054 (42S22): Unknown column 'password' in 'field list'

何か見逃しているのでしょうか?

答え1

MySQL 5.7 では、テーブル フィールドpassword内のフィールドmysql.userが削除され、フィールド名は になりましたauthentication_string

まずデータベースを選択します:

mysql> use mysql;

次に表を表示します。

mysql> show tables;

userテーブルとそのフィールドが表示されます。

mysql> describe user;

passwordという名前のフィールドは存在せず、パスワード フィールドの名前はであることに気づくでしょうauthentication_string。そのため、次のようにします。

update user set authentication_string=password('XXXX') where user='root';

@Rui F Ribeiro の提案に従って、代わりに以下を実行することもできます:

mysql> SET PASSWORD FOR 'root' = PASSWORD('new_password');

答え2

MySQLのパスワード変更方法はSET PASSWORD

SET PASSWORD FOR 'root' = PASSWORD('new_password');

見るMySQL 5.7 リファレンスマニュアル / ... / SET PASSWORD 構文

SET PASSWORD ステートメントは、クリアテキスト (暗号化されていない) または暗号化された値として指定されたパスワードを MySQL ユーザー アカウントに割り当てます。

'auth_string' represents a cleartext password.

'hash_string' represents an encrypted password.

Rahul からの承認された回答では、ステートメントを使用してパスワードを更新する方法が示されていますDML

update user set authentication_string=password('XXXX') where user='root';

警告: これは公式でサポートされている方法ではありません。何をしているのかわからないと、問題が発生する可能性があります。忘れないでくださいFLUSH PRIVILEGES

ユーザーの作成、権限の変更、パスワードの変更など、ほとんどの操作では、高レベルのステートメントを使用する必要があります。高レベルのステートメントは使いやすく、多くの MySQL バージョンと互換性があるだけでなく、間違いを防ぐこともできます (もちろん、「NO_AUTO_CREATE_USER」SQL モードを設定することを忘れないでください)。Galera クラスターのような MyISAM に適さない環境でも、通常は問題なく動作します。

FLUSH PRIVILEGESの使用を停止する

直接の DML ステートメントではなく、、、またはGRANTREVOKE使用してください。SET PASSWORDRENAME USER

更新: SET PASSWORD ... = PASSWORD('auth_string') 構文はMySQL 5.7.6 以降では非推奨将来の MySQL リリースでは削除される予定です。

答え3

mysqladmin -u user-name password -p "oldpassword" "newpass"

ログインできる場合はこれを試してください。""動作しません。''シングルクォートを試してください。

update user set password=PASSWORD("newpass") where User='ENTER-USER-NAME-HERE';

答え4

この問題に対して、私は単純で失礼な方法を使い、フィールド名をパスワードに変更しました。その理由は、私がMacのNavicatプレミアムソフトウェアを使用しているときに、視覚的な操作エラーが発生したためです。「フィールドリスト」の「パスワード」列が不明です。ソフトウェア自体がパスワードを使用しているため、簡単に操作できません。そのため、データベースのコマンドラインにルートし、実行します。

Use mysql;

次に、フィールド名を変更します。

ALTER TABLE user CHANGE authentication_string password text;

やっぱり普通。

関連情報