GALAT 1698 (28000): Akses ditolak untuk 'root' @ 'localhost' pengguna

382

Saya sedang menyiapkan server baru dan terus mengalami masalah ini.

Ketika saya mencoba masuk ke database MySQL dengan pengguna root, saya mendapatkan kesalahan:

GALAT 1698 (28000): Akses ditolak untuk 'root' @ 'localhost' pengguna

Tidak masalah jika saya terhubung melalui terminal (SSH), melalui PHPMyAdmin atau Klien MySQL, misalnya Navicat. Mereka semua gagal.

Saya mencari di tabel mysql.user dan mendapatkan yang berikut ini:

+------------------+-------------------+
| user             | host              |
+------------------+-------------------+
| root             | %                 |
| root             | 127.0.0.1         |
| amavisd          | localhost         |
| debian-sys-maint | localhost         |
| iredadmin        | localhost         |
| iredapd          | localhost         |
| mysql.sys        | localhost         |
| phpmyadmin       | localhost         |
| root             | localhost         |
| roundcube        | localhost         |
| vmail            | localhost         |
| vmailadmin       | localhost         |
| amavisd          | test4.folkmann.it |
| iredadmin        | test4.folkmann.it |
| iredapd          | test4.folkmann.it |
| roundcube        | test4.folkmann.it |
| vmail            | test4.folkmann.it |
| vmailadmin       | test4.folkmann.it |
+------------------+-------------------+

Seperti yang Anda lihat, root harus memiliki akses.

Servernya cukup sederhana, karena saya sudah mencoba memecahkan masalah ini untuk sementara waktu sekarang ..

Ini menjalankan Ubuntu 16.04.1 LTS dengan Apache, MySQL dan PHP, sehingga dapat meng-host situs web, dan iRedMail 0.9.5-1, sehingga dapat meng-host email.

Login ke database MySQL berfungsi dengan baik sebelum saya menginstal iRedMail. Saya juga mencoba, hanya menginstal iRedMail, tetapi kemudian root, juga tidak berfungsi ...

Jika seseorang dapat memberi tahu saya cara memperbaiki masalah login MySQL saya atau cara saya menginstal iRedMail, di atas instalasi MySQL yang ada. Dan ya saya mencoba Tips Instalasi dan saya tidak dapat menemukan variabel-variabel dalam file konfigurasi.

Folkmann
sumber
Saya mengikuti tautan ini dan opsi pertama berfungsi untuk saya: askubuntu.com/questions/763336/…
Mikael Arhelger
3
sudo mysql_secure_installationadalah cara termudah untuk memperbaikinya
Sergey Ponomarev

Jawaban:

1121

Beberapa sistem seperti Ubuntu, mysql menggunakan secara default plugin UNIX auth_socket .

Pada dasarnya berarti bahwa: db_users yang menggunakannya, akan "auth" oleh kredensial pengguna sistem. Anda dapat melihat apakah rootpengguna Anda diatur seperti ini dengan melakukan hal berikut:

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;

+------------------+-----------------------+
| User             | plugin                |
+------------------+-----------------------+
| root             | auth_socket           |
| mysql.sys        | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+

Seperti yang Anda lihat dalam kueri, rootpengguna menggunakan auth_socketplugin

Ada 2 cara untuk menyelesaikan ini:

  1. Anda dapat mengatur pengguna root untuk menggunakan mysql_native_passwordplugin
  2. Anda dapat membuat yang baru db_userdengan Anda system_user(disarankan)

Pilihan 1:

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart

Opsi 2: (ganti YOUR_SYSTEM_USER dengan nama pengguna yang Anda miliki)

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY '';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
mysql> UPDATE user SET plugin='auth_socket' WHERE User='YOUR_SYSTEM_USER';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart

Ingat bahwa jika Anda menggunakan opsi # 2 Anda harus terhubung ke mysql sebagai nama pengguna sistem Anda ( mysql -u YOUR_SYSTEM_USER)

Catatan: Pada beberapa sistem (misalnya, Debian stretch) plugin 'auth_socket' disebut 'unix_socket' , jadi perintah SQL yang sesuai adalah:UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

Pembaruan: dari komentar @ andy tampaknya mysql 8.xx diperbarui / diganti auth_socketkarena caching_sha2_passwordsaya tidak memiliki pengaturan sistem dengan mysql 8.xx untuk menguji ini, namun langkah-langkah di atas akan membantu Anda untuk memahami masalah ini. Inilah jawabannya:

Satu perubahan pada MySQL 8.0.4 adalah bahwa plugin otentikasi default baru adalah 'caching_sha2_password'. 'YOUR_SYSTEM_USER' yang baru akan memiliki plugin auth ini dan Anda dapat masuk dari bash shell sekarang dengan "mysql -u YOUR_SYSTEM_USER -p" dan memberikan kata sandi untuk pengguna ini saat diminta. Tidak perlu untuk langkah "UPDATE user SET plugin". Untuk pembaruan plugin autentikasi 8.0.4 lihat, https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/

zetacu
sumber
5
Opsi 1 bekerja untuk saya. Tapi kemudian saya juga harus lari sudo gedit /etc/phpmyadmin/config.inc.php. Kemudian saya melakukan pencarian AllowNoPassworddan menghapus komentar kedua baris yang berisi itu. Kemudian saya bisa login sebagai root tanpa kata sandi.
Joe
7
Opsi 2 berfungsi. Saya pikir itu selalu praktik terbaik untuk membuat pengguna baru dan menggunakan meninggalkan root untuk berada di sana!
PasinduJay
2
yang IDENTIFIED BY ''sedikit mungkin harusIDENTIFIED BY 'YOUR_PASSWD'
YakovL
4
Akhirnya, jawaban yang benar - benar berfungsi !! Ada jutaan jawaban di luar sana yang mengatakan do mysqld_safe --skip-grant-tablesetc, dan itu tidak berfungsi.
Stewart
4
Ok, bagaimana melakukan ini, jika sudo mysql -u root -ptidak membiarkan saya masuk?
Hrvoje T
173

Periksa di sini:

Versi BARU dari MYSQL melakukannya dengan cara ini.

Di my-sql baru jika kata sandi dibiarkan kosong saat menginstal maka didasarkan pada auth_socketplugin.

Cara yang benar adalah dengan login ke my-sql dengan sudoprivilege.

$ sudo mysql -u root -p

Dan kemudian memperbarui kata sandi menggunakan:

$ ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';

Setelah ini dilakukan stop and startserver mysql.

$  sudo service mysql stop
$  sudo service mysql start

Untuk detail lengkap, Anda bisa merujuk ke tautan ini .

Berikan komentar untuk keraguan.

Nandesh
sumber
4
Ini bekerja untuk saya menggunakan Ubuntu 18. Terima kasih banyak.
Peter Drinnan
10
Bekerja juga di ubuntu 18.04
sgtkuncoro
2
Persis apa yang saya cari. Terima kasih :) Bekerja di Ubuntu 18
Manthan_Admane
2
ini bekerja seperti pesona, lubuntu 19.04
Kvvaradha
3
Ini bekerja dengan baik. Tautan ini bermanfaat.
kjohri
9

Saya mengalami masalah ini pada Debian 8 VM yang berinteraksi dengan saya melalui Putty di desktop Windows 10 saya.

Saya mencoba berbagai saran di sini tetapi tidak ada yang berhasil dan saya menjalankan MariaDB pada host Debian. Pada akhirnya saya menemukan bahwa saya tidak dapat memulai server db dalam safe mode tetapi saya tidak perlu dan perintah-perintah berikut ini benar-benar bekerja untuk saya yaitu memungkinkan pengguna MySql yang baru dibuat untuk masuk ke server MySql / MariaDB:

sudo service mysql restart
sudo mysql # logs in automatically into MariaDB
use mysql;
update user set plugin='' where user='your_user_name';
flush privileges;
exit;
sudo service mysql restart # restarts the mysql service

Jika hal di atas tidak berhasil bagi Anda, ikuti langkah-langkah yang diuraikan dalam pos zetacu di atas ( zetacu ) lalu ikuti langkah saya.

Sekarang Anda harus dapat menggunakan klien terminal jarak jauh dan masuk dengan aman ke mysql menggunakan perintah:

mysql -u your_user_name -p

* ketikkan kata sandi saat diminta

Tahir Khalid
sumber
Sesederhana itu. Nah, hanya perintah pertama yang tidak diizinkan untuk mengeksekusi yang kedua, jadi saya akan menyesuaikan pengeditannya - tolong lihat apakah saya benar ...
kokbira
7

Saya akan menyarankan untuk menghapus koneksi Mysql -

UPDATE-Ini untuk Mysql versi 5.5, jika versi Anda berbeda, silakan ubah baris pertama sesuai

sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-5.5 mysql-client-core-5.5
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get autoremove
sudo apt-get autoclean

Dan Pasang Lagi Tapi kali ini tentukan sendiri kata sandi root. Ini akan menghemat banyak usaha.

sudo apt-get update
sudo apt-get install mysql-server
Eminem347
sumber
@ internet mungkin itu karena beberapa masalah lain yang Anda abaikan saat menginstal lagi
Eminem347
@ PJBrunet mungkin menyebabkan versi Mysql Anda berbeda
Eminem347
Cukup adil, tetapi solusi serba guna adalah yang terbaik.
PJ Brunet
6

Setelah berjam-jam berjuang tanpa solusi di sini, ini berhasil bagi saya kemudian saya menemukan video youtube di mana ia mengatakan kolom kata sandi sekarang disebut authentication_string. Jadi saya bisa mengubah kata sandi saya sebagai berikut: Pertama masuk ke mysql dari terminal

sudo mysql

kemudian di dalam tipe mysql apa pun setelah mysql>

mysql> use mysql
mysql> update user set authentication_string=PASSWORD("mypass") where user='root';
mysql> flush privileges;
mysql> quit;

pada titik ini Anda keluar dari mysql kembali ke tempat terminal normal Anda. Anda harus memulai ulang mysql agar ini berlaku. untuk jenis itu yang berikut ini:

sudo service mysql restart

Lihat tautan video ini untuk pemahaman yang lebih baik

Ameer Ul Islam
sumber
5

Langkah 1. sudo mysql -u root -p

Langkah 2. USE mysql;

langkah 3. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';

Di sini 'admin' adalah kata sandi baru Anda, Anda dapat mengubahnya.

langkah 4. exit

Terima kasih. Kamu selesai.

Y. Joy Ch. Singha
sumber
5

Tidak perlu sudo

Basis data diinisialisasi dengan 2 akun semua hak istimewa: yang pertama adalah "root" yang tidak dapat diakses dan yang kedua dengan nama pengguna Anda (periksa dengan perintah whoami).

Untuk mengaktifkan akses ke akun root, Anda harus masuk dengan nama pengguna Anda

mysql -u $(whoami)

dan secara manual mengubah kata sandi untuk root

use mysql;
set password for 'root'@'localhost' = password('YOUR_ROOT_PASSWORD_HERE');
flush privileges;
quit

Masuk sebagai 'root'

mysql -u root -p
Raoul HATTERER
sumber
Anda jawaban yang benar untuk versi mysql yang sebenarnya, terima kasih!
Hugo S
3

Langkah pertama: pergi ke /etc/phpmyadmin/config.inc.php lalu batalkan komentar pada baris tempat Anda menemukan AllowNoPassword. Langkah kedua: masuk ke akun default mysql Anda

mysql -u root -p
use mysql;
update user set plugin="" where user='root';
flush privilege;

dan itu saja!

Ugngel Ugarte
sumber
3

Itu berhasil bagi saya:

mysql --user=root mysql
CREATE USER 'some_user'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'some_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Dorad
sumber
3

Saya juga menghadapi masalah yang sama pada saat pertama.

Sekarang sudah diperbaiki:

Pertama, Anda menyalin /etc/mysql/mysql.conf.d/mysqld.cnffile dan melewati ke /etc/mysql/my.cnf.

Anda dapat melakukannya dengan perintah:

sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf

Sekarang mari Istirahatkan kata sandi:

Gunakan perintah berikut di terminal Anda:

sudo service mysql stop 
sudo service mysql start
sudo mysql -u root

Sekarang Anda berada di dalam konsol mysql.

Kemudian mari kita menulis beberapa pertanyaan untuk mereset kata sandi root kami

USE mysql
update mysql.user set authentication_string=password('newpass') where user='root' and Host ='localhost';
update user set plugin="mysql_native_password"; 
flush privileges;
quit

Sekarang kita bisa bersih-bersih /etc/mysql/my.cng

Buka file di atas di editor Anda dan hapus seluruh baris di dalam file.

Setelah itu mari kita mulai kembali mysql:

sudo mysql service restart 

Sekarang mari kita gunakan mysql dengan kata sandi yang baru dibuat:

sudo mysql -u root -p

Terakhir, masukkan kata sandi Anda yang baru dibuat.

muhammed fairoos nm
sumber
1
Bekerja dengan baik! tetapi jawaban Anda perlu diperbarui !! /etc/mysql/my.cnf dan bukan /etc/mysql/my.cng dan untuk layanan, restart layanan sudo, mysql, restart
essayoub
3

Saya menemukan solusi saya setelah jam penelitian di sini.

Hentikan MySQL

sudo service mysql stop

Buat direktori layanan MySQL.

sudo mkdir /var/run/mysqld

Berikan izin pengguna MySQL untuk menulis ke direktori layanan.

sudo chown mysql: /var/run/mysqld

Mulai MySQL secara manual, tanpa izin pemeriksaan atau jaringan.

sudo mysqld_safe --skip-grant-tables --skip-networking &

Masuk tanpa kata sandi.

 mysql -uroot mysql

perbarui kata sandi

UPDATE mysql.user SET authentication_string=PASSWORD('YOURNEWPASSWORD'), plugin='mysql_native_password' WHERE User='root' AND Host='%';
EXIT;

Matikan MySQL.

sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown

Mulai layanan MySQL secara normal.

sudo service mysql start
Sanjun Dev
sumber
Ini memberi saya prompt mysql ketika TIDAK ADA YANG LAIN akan! Terima kasih!
UserX
2

Anda ingin mengakses MySQL dengan pengguna root tetapi Anda tidak memberikan kata sandi root yang benar.

Jika Anda perlu menetapkan kata sandi baru untuk root , situs MySQL memiliki dokumentasi yang bagus tentang bagaimana melakukannya: http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html

Saya tidak akan menunjukkan prosesnya di sini karena dokumentasi MySql pada tautan di atas jelas dan ringkas .

Cristian Gonçalves
sumber
Terima kasih atas anwser, tetapi saya tidak bisa membuatnya berfungsi, jadi saya telah memilih untuk menginstal iRedMail dengan database pgSQL.
Folkmann
Roger Folkman! Senang mengetahui bahwa Anda memecahkan masalah Anda bagaimanapun caranya.
Cristian Gonçalves
Tautan putus. mysql.com memiliki banyak tautan rusak selama bertahun-tahun. Anda harus menyalin dan menempelkan informasi yang relevan di sini, yang boleh saja asalkan Anda menghubungkan sumbernya.
Angsa
1

os: Ubuntu18.04

mysql: 5.7

  1. tambahkan skip-grant-tableske akhir file mysqld.cnf

  2. cp my.cnf

sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf
  1. atur ulang kata sandi
(base)   ~ sudo service mysql stop 
(base)   ~ sudo service mysql start
(base)   ~ mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

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> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed, 3 warnings
mysql> update mysql.user set authentication_string=password('newpass') where user='root' and Host ='localhost';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> update user set plugin="mysql_native_password"; 
Query OK, 0 rows affected (0.00 sec)
Rows matched: 4  Changed: 0  Warnings: 0

mysql>  flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye
  1. hapus skip-grant-tablesdari my.cnf
(base)   ~ sudo emacs /etc/mysql/mysql.conf.d/mysqld.cnf 
(base)   ~ sudo emacs /etc/mysql/my.cnf                 
(base)   ~ sudo service mysql restart
  1. buka mysql
(base)   ~ mysql -uroot -ppassword 
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

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> 
  1. periksa kebijakan kata sandi
mysql> select @@validate_password_policy;
+----------------------------+
| @@validate_password_policy |
+----------------------------+
| MEDIUM                     |
+----------------------------+
1 row in set (0.00 sec)


mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+
6 rows in set (0.08 sec)!
  1. ubah konfigurasi dari validate_password
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.05 sec)

mysql> set global validate_password_mixed_case_count=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_number_count=3;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_special_char_count=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_length=3;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_dictionary_file    |       |
| validate_password_length             | 3     |
| validate_password_mixed_case_count   | 0     |
| validate_password_number_count       | 3     |
| validate_password_policy             | LOW   |
| validate_password_special_char_count | 0     |
+--------------------------------------+-------+
6 rows in set (0.00 sec)

perhatikan Anda harus tahu bahwa kesalahan Anda disebabkan oleh apa? validate_password_policy?

Anda harus memutuskan untuk mereset kata sandi Anda untuk mengisi kebijakan atau mengubah kebijakan.

iamcxl
sumber
0

Ini telah terjadi pada saya juga. Masalahnya adalah dengan repo mysql yang sudah ada dengan distro linux. Jadi, ketika Anda melakukannya: $ sudo apt install mysql-server menginstal mysql dari repo default mereka yang memberikan masalah ini. Jadi untuk mengatasinya Anda perlu menghapus instalan yang diinstal mysql $ sudo apt remove mysql* --purge --auto-remove

Kemudian unduh mysql repo dari situs web mysql resmi MySQL APT Repo Ikuti dokumentasi mereka tentang cara menambahkan repo dan menginstalnya. Ini tidak memberikan masalah. Juga seperti dijawab oleh @zetacu, Anda dapat memverifikasi bahwa root mysql sekarang memang menggunakan plugin mysql_native_password

sudip
sumber
0

dalam hal ini,

dev@Dev-007:~$ mysql -u root -p
Enter password: 
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Saya yakin kata sandi saya benar kalau tidak kode kesalahan akan ERROR 1045 (28000): Access denied for user

jadi saya relogin menggunakan sudo,

dev@Dev-007:~$ sudo mysql -u root -p

kali ini berhasil untukku. lihat dokumen

dan kemudian ubah kata sandi root,

mysql> alter user 'root'@'%' identified with mysql_native_password by 'me123';
Query OK, 0 rows affected (0.14 sec)

mysql> 

kemudian restart server menggunakan sudo /etc/init.d/mysql restart

Mohideen bin Mohammed
sumber