Bagaimana cara mengubah kata sandi 'root' MySQL menggunakan MySQL v5.7?

14

Lingkungan saat ini:

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)

Pengguna Kata Sandi Ubah:

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

Apakah saya melewatkan sesuatu?

Shivu RH
sumber
cobalah untuk memulai mysqldalam mode aman. maka Anda dapat mengubah kata sandi root
Mongrel
Untuk siapa pun yang membaca utas ini. MySQL 5.7 memiliki perubahan substansial di bawah tenda. Harap baca tentang mereka sebelum memutakhirkan.
Rui F Ribeiro

Jawaban:

24

Di MySQL 5.7, passwordbidang dalam mysql.userbidang tabel dihapus, sekarang nama bidangnya authentication_string.

Pertama-tama pilih database:

mysql> use mysql;

Dan kemudian tunjukkan tabel:

mysql> show tables;

Anda akan menemukan usertabel, dan melihat bidangnya:

mysql> describe user;

Anda akan menyadari bahwa tidak ada bidang bernama password, bidang kata sandi bernama authentication_string. Jadi, lakukan saja ini:

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

Seperti yang disarankan oleh @Rui F Ribeiro, atau Anda dapat menjalankan:

mysql> SET PASSWORD FOR 'root' = PASSWORD('new_password');
Rahul
sumber
1
+1 untuk referensi otentikasi_string. Saya juga baru-baru mengetahuinya setelah memutakhirkan ke 5.7
Rui F Ribeiro
4
Meskipun tidak diarahkan sepenuhnya untuk jawaban ini, alternatif lain untuk 5.7 adalahSET PASSWORD FOR 'root' = PASSWORD('new_password');
Rui F Ribeiro
1
@RuiFRibeiro terima kasih, perbarui jawaban saya
Rahul
1
Rahul Awalnya saya mengedit utas lebih dari 5.7, tetapi kemudian mengubahnya menggunakan MySQL 5.7, untuk menjaga semangat pertanyaan. misalnya @Shivu tidak tahu itu adalah perubahan 5.7.
Rui F Ribeiro
1
Ini adalah cara membingkai pertanyaan. Kami tidak mengedit pertanyaan dan jawaban hanya untuk kepentingan OP, tetapi juga untuk orang lain nanti.
Rui F Ribeiro
2

Cara MySQL mengubah kata sandi adalah SET PASSWORD

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

lihat Manual Referensi MySQL 5.7 / ... / SET Sintaks PASSWORD

Pernyataan SET PASSWORD memberikan kata sandi ke akun pengguna MySQL, yang ditentukan sebagai teks teks (tidak terenkripsi) atau nilai terenkripsi:

'auth_string' represents a cleartext password.

'hash_string' represents an encrypted password.

Jawaban yang diterima dari Rahul menunjukkan cara memperbarui kata sandi dengan DMLpernyataan.

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

Peringatan: itu bukan cara yang resmi dan didukung. Ini dapat menyebabkan masalah, jika Anda tidak tahu apa yang Anda lakukan. Jangan lupa FLUSH PRIVILEGES.

Untuk sebagian besar operasi, seperti membuat pengguna, mengubah hak istimewanya, atau mengubah kata sandi, Anda akan ingin menggunakan pernyataan tingkat tinggi. Tidak hanya mereka lebih mudah digunakan dan mereka kompatibel dengan sejumlah besar versi MySQL, tetapi mereka juga akan mencegah Anda membuat kesalahan (tentu saja, ingatlah untuk mengatur "NO_AUTO_CREATE_USER" mode sql). Mereka bahkan biasanya bekerja dengan baik di lingkungan bermusuhan MyISAM seperti cluster Galera.

Berhentilah menggunakan PRIVILEG FLUSH

Silakan gunakan GRANT, REVOKE, SET PASSWORD, atau RENAME USERdan bukan pernyataan DML langsung.

Perbarui: SET PASSWORD ... = Sintaks PASSWORD ('auth_string') tidak digunakan pada MySQL 5.7.6 dan akan dihapus pada rilis MySQL yang akan datang.

Ivanov
sumber
1

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

jika Anda bisa login maka coba ini ""tidak akan berhasil coba ''penawaran tunggal

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

Anjing kampung
sumber
Sementara saya lebih suka jawaban mysqladmin, lihat jawaban Rahul. Permintaan SQL Anda sudah usang. Saya mengoreksi mysqladmin, Anda tidak memiliki kata sandi.
Rui F Ribeiro
1
Terima kasih Ribeiro. Saya merindukanauthentication_string
Mongrel
0

Dalam kasus saya

mysql.server start
$ mysql -uroot
mysql> update user set authentication_string=password('123456') where User='root';
mysql> exit;
mysql.server restart (if you not restart , connection will not work.)

Jadi saya pikir, perintah pembaruan Anda benar, tetapi Anda harus me-restart server mysql Anda.

Jack LI
sumber
-1

Untuk masalah ini, saya menggunakan metode yang sederhana dan kasar, mengubah nama bidang menjadi kata sandi, alasannya adalah karena saya menggunakan perangkat lunak mac navicat premium dalam kesalahan operasi visual: 'Kata sandi' kolom 'di' daftar bidang 'tidak dikenal, perangkat lunak itu sendiri menggunakan kata sandi sehingga saya tidak bisa dengan mudah beroperasi. Oleh karena itu, saya root ke baris perintah basis data, jalankan

Use mysql;

Dan kemudian memodifikasi nama bidang:

ALTER TABLE user CHANGE authentication_string password text;

Lagipula normal.

luyishisi
sumber