Pengguna MySQL, DB, tidak memiliki kolom kata sandi - Menginstal MySQL di OSX

172

Saya mencoba mengubah kata sandi root MySql.

Apa yang saya lakukan di bawah.

  1. Instal MySql-5.7.6 ~ .dmg (Server Komunitas) dan meja kerja.
  2. Matikan server pada preferensi Sistem OSX.
  3. Akses MySql dengan konsol. Perintahnya adalahmysqld_safe --skip-grant
  4. Jalankan update user set password=password('1111') where user='root';dan dapatkan pesan kesalahan -> ERROR 1054 (42S22): Unknown column 'password' in 'field list'.

FYI, saya lakukan use mysql;. Jadi saya memang memilih permintaan pada tabel pengguna dan menemukan kolom kata sandi sebenarnya tidak ada.

Sangat aneh. Apakah mungkin tabel pengguna asli tidak memiliki kolom kata sandi?

Bagaimana saya bisa mengubah kata sandi, yang tidak ada?

Terima kasih atas jawaban Anda: D

Juneyoung Oh
sumber
Sekarang saya menguji lagi dan saya dapat mengakses MySQL tanpa PW :( Apakah saya tetap bisa mengubah (maksud saya mengubah tabel pengguna dan menambahkan kolom kata sandi melalui kueri) tabel pengguna?
Juneyoung Oh
SET PASSWORD untuk root @ localhost = kata sandi ('new-pass') - berfungsi untuk semua versi mysql
SIDU
UPDATE mysql.user SET authentication_string= 'password' WHERE User = 'root'; Karena bidang 'Kata Sandi' telah dihapus oleh mysql dan diganti dengan authentication_string. Catatan: bahwa fungsi mysql PASSWORD ('password') bergantung pada algoritma MD5 yang telah diretas sejak lama menggunakan serangan hari kelahiran. Jadi menggunakannya memberikan rasa aman yang salah karena penyerang dapat menempelkan hash yang dihasilkannya di situs web publik seperti hashkiller.co.uk/md5-decrypter.aspx dan mengambil kata sandi teks biasa Anda.
Dr Deo

Jawaban:

556

Di MySQL 5.7, bidang kata sandi di bidang tabel mysql.user telah dihapus, sekarang nama bidangnya adalah 'authentication_string'.

Pertama-tama pilih database:

mysql>use mysql;

Dan kemudian tunjukkan tabel:

mysql>show tables;

Anda akan menemukan tabel pengguna, sekarang mari kita lihat isinya:

mysql> describe user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field                  | Type                              | Null | Key | Default               | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host                   | char(60)                          | NO   | PRI |                       |       |
| User                   | char(16)                          | NO   | PRI |                       |       |
| Select_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Insert_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Update_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Delete_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Create_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Drop_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Reload_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Shutdown_priv          | enum('N','Y')                     | NO   |     | N                     |       |
| Process_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| File_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Grant_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| References_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Index_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Show_db_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Super_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tmp_table_priv  | enum('N','Y')                     | NO   |     | N                     |       |
| Lock_tables_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Execute_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_slave_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_client_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Create_view_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Show_view_priv         | enum('N','Y')                     | NO   |     | N                     |       |
| Create_routine_priv    | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_routine_priv     | enum('N','Y')                     | NO   |     | N                     |       |
| Create_user_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Event_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Trigger_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tablespace_priv | enum('N','Y')                     | NO   |     | N                     |       |
| ssl_type               | enum('','ANY','X509','SPECIFIED') | NO   |     |                       |       |
| ssl_cipher             | blob                              | NO   |     | NULL                  |       |
| x509_issuer            | blob                              | NO   |     | NULL                  |       |
| x509_subject           | blob                              | NO   |     | NULL                  |       |
| max_questions          | int(11) unsigned                  | NO   |     | 0                     |       |
| max_updates            | int(11) unsigned                  | NO   |     | 0                     |       |
| max_connections        | int(11) unsigned                  | NO   |     | 0                     |       |
| max_user_connections   | int(11) unsigned                  | NO   |     | 0                     |       |
| plugin                 | char(64)                          | NO   |     | mysql_native_password |       |
| authentication_string  | text                              | YES  |     | NULL                  |       |
| password_expired       | enum('N','Y')                     | NO   |     | N                     |       |
| password_last_changed  | timestamp                         | YES  |     | NULL                  |       |
| password_lifetime      | smallint(5) unsigned              | YES  |     | NULL                  |       |
| account_locked         | enum('N','Y')                     | NO   |     | N                     |       |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
45 rows in set (0.00 sec)

Kejutan! Tidak ada bidang bernama 'kata sandi', bidang kata sandi bernama 'otentikasi_string'. Jadi, lakukan saja ini:

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

Sekarang, semuanya akan beres.

Dibandingkan dengan MySQL 5.6, perubahannya cukup luas: Apa yang Baru di MySQL 5.7

simpuljh
sumber
42
Tuan membuat hari saya.
Bisonfan95
3
Metode ini bekerja bahkan dengan pembatasan --skip-grant-tables ketika memulai mysqld. Karena Anda adalah pengguna anonim, Anda tidak dapat mengubah kata sandi dengan: ALTER USER 'root' @ 'localhost' IDENTIFIKASI OLEH 'new-password' ALTER USER 'root' @ '*' IDENTIFIKASI OLEH 'new-password' Ini akan memberikan Anda kesalahan izin pengguna anonim.
Bisonfan95
bagaimana jika tidak ada tabel sama sekali?
Sahand
1
mengubah nama field kata sandi ... satu keputusan yang menyebabkan begitu banyak orang begitu banyak masalah ...
talsibony
2
Saat mengatur ulang kata sandi root pada langkah 2), ubah juga plugin auth ke mysql_native_password: use mysql; update user set authentication_string=PASSWORD("") where User='root'; update user set plugin="mysql_native_password" where User='root'; # THIS LINE flush privileges; quit;
Viswa
26

Kesalahan ini terjadi jika Anda tidak mengatur kata sandi saat instalasi, dalam hal ini mysql menggunakan plugin unix-socket .

Tetapi jika menghapus tautan plugin dari pengaturan (tabel mysql.user) akan ada masalah lain. Ini tidak memperbaiki masalah dan menciptakan masalah lain. Untuk memperbaiki tautan yang dihapus dan mengatur kata sandi ("PWD") lakukan:

1) Jalankan dengan --skip-grant-tablesseperti yang dikatakan di atas.

Jika doesnt bekerja kemudian menambahkan string skip-grant-tablespada bagian [mysqld]dari /etc/mysql/mysql.conf.d/mysqld.cnf. Lalu lakukan sudo service mysql restart.

2) Jalankan mysql -u root -p, lalu (ubah "PWD"):

update mysql.user 
    set authentication_string=PASSWORD("PWD"), plugin="mysql_native_password" 
    where User='root' and Host='localhost';    
flush privileges;

quit

kemudian sudo service mysql restart. Periksa: mysql -u root -p.

Sebelum restartmenghapus string itu dari file mysqld.cnf, jika Anda mengaturnya di sana.

bl79
sumber
Temukan! Diperlukan plugin = "mysql_native_password" dan hak istimewa flush. Tidak dapat menjalankan ini dengan contoh lain. Terima kasih bl79!
TheRealWebGuy
Saya mendapatkanERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '("MYNEWPASSWORD"), plugin="mysql_native_password"
Peluang Smith
jawaban Anda Hebat! ini adalah salah satu jawaban yang membantu saya selama pertarungan 6 jam
AlexNikonov
plugin = "mysql_native_password" Selesai rick untuk saya
Joyner
Perfectly Works for me
Mayank Sharma
23

Salah satu perangkap saya jatuh ke dalam adalah tidak ada bidang kata sandi sekarang, itu telah diubah namanya jadi:

update user set password=PASSWORD("YOURPASSWORDHERE") where user='root';

Seharusnya sekarang:

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

John C
sumber
16

Gunakan ALTER USERperintah daripada mencoba memperbarui satu USERbaris. Perlu diingat bahwa mungkin ada lebih dari satu pengguna 'root', karena entitas pengguna juga memenuhi syarat oleh mesin dari mana mereka terhubung

https://dev.mysql.com/doc/refman/5.7/en/alter-user.html

Sebagai contoh.

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-password' 
ALTER USER 'root'@'*' IDENTIFIED BY 'new-password' 
O. Jones
sumber
2
Untuk MySQL 5.7.9, saya harus ALTER USER agar berfungsi dengan benar. Terima kasih.
Shin
kami perlu pengguna \ diikuti oleh perintah di atas. Menggunakan MySql 5.7.12. ty
bobsouza
jawaban ini hanya berfungsi untuk saya, pada Ubuntu 16.04, mysql 5.7.19;
A1Gard
Apakah mereka mengubah wildcard dari @ ke *? Grr ... sekarang saya punya lebih banyak pertanyaan daripada ketika saya datang ke sini.
pguardiario
4

Itu hanya bekerja dengan saya ketika saya "memerah" setelah perintah yang disebutkan di sini. Berikut daftar lengkap perintah yang saya gunakan:

Jawaban sebelumnya mungkin tidak berfungsi untuk versi mysql nanti. Coba langkah-langkah ini jika jawaban sebelumnya tidak berhasil untuk Anda:

1- Klik pada ikon wamp> mysql> mysql console

2- tulis perintah berikut, satu per satu

use mysql;
update user set authentication_string=password('your_password') where user='root';
FLUSH PRIVILEGES;
quit
Amgad
sumber
4

Terima kasih untuk bantuannya. Untuk berjaga-jaga jika orang masih mengalami masalah, coba ini.

Untuk MySQL versi 5.6 ke bawah

Apakah Anda lupa kata sandi 'ROOT' Mac OS X dan perlu mengatur ulang? Ikuti 4 langkah sederhana ini:

  1.  Hentikan server mysqld. Biasanya ini dapat dilakukan dari 'System Prefrences'> MySQL> 'Stop MySQL Server'
  2.  Mulai server dalam mode aman dengan bypass hak istimewa Dari terminal:      sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
  3.  Di jendela terminal baru:      sudo /usr/local/mysql/bin/mysql -u root      UPDATE mysql.user SET Password=PASSWORD('NewPassword') WHERE User='root';      FLUSH PRIVILEGES;      \q
  4.  Hentikan server mysqld lagi dan mulai ulang dalam mode normal.

Untuk MySQL versi 5.7 ke atas

  1.  Hentikan server mysqld. Biasanya ini dapat dilakukan dengan dari 'System Prefrences' > MySQL > 'Stop MySQL Server'
  2.  Mulai server dalam mode aman dengan bypass hak istimewa Dari terminal:      sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
  3.  Di jendela terminal baru:            sudo /usr/local/mysql/bin/mysql -u root      UPDATE mysql.user SET authentication_string=PASSWORD('NewPassword') WHERE User='root';      FLUSH PRIVILEGES;      \q      
  4.  Hentikan server mysqld lagi dan mulai ulang dalam mode normal.
eli
sumber
Ini membantu saya saat menginstal mysql <5.7
Ankit Agarwal
3

Untuk masalah ini, saya menggunakan metode yang sederhana dan kasar, mengubah nama nama bidang menjadi kata sandi, alasannya adalah karena saya menggunakan perangkat lunak mac navicat dalam kesalahan operasi visual: 'Kata sandi' kolom tidak dikenal di 'daftar bidang', 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
0

Root Cause: root tidak memiliki kata sandi, dan pernyataan python connect Anda harus mencerminkan hal itu.

Untuk mengatasi kesalahan 1698, ubah kata sandi sambung python Anda ke ''.

catatan: memperbarui kata sandi pengguna secara manual tidak akan menyelesaikan masalah, Anda masih akan mendapatkan kesalahan 1698

Jameskchau
sumber
0

ingat kata sandi perlu diatur lebih lanjut bahkan setelah me-restart mysql seperti di bawah ini

SET PASSWORD = PASSWORD('root');
Pravin
sumber