Akses Ditolak untuk Pengguna 'root' @ 'localhost' (menggunakan kata sandi: YA) - Tidak Ada Hak Istimewa?

111

Saya terus menerus menerima kesalahan ini.

Saya menggunakan mySQL Workbench dan dari apa yang saya temukan adalah bahwa hak istimewa skema root adalah null. Tidak ada hak istimewa sama sekali.

Saya mengalami masalah di seluruh platform tempat server saya digunakan dan ini adalah masalah mendadak.

[email protected] tampaknya memiliki banyak akses tetapi saya masuk sebagai itu, tetapi itu hanya menetapkan ke localhost lagian - localhost tidak memiliki hak istimewa.

Saya telah melakukan beberapa hal seperti FLUSH HOSTS, FLUSH PRIVILEGES, dll tapi tidak menemukan sukses dari itu atau internet.

Bagaimana saya bisa mendapatkan akses root kembali? Saya merasa frustrasi karena ketika saya melihat sekeliling, orang-orang mengharapkan Anda untuk "memiliki akses" tetapi saya tidak memiliki akses sehingga saya tidak dapat masuk ke baris perintah atau apa pun dan GRANTdiri saya sendiri.

Saat menjalankan SHOW GRANTS FOR rootinilah yang saya dapatkan sebagai imbalan:

Kode Kesalahan: 1141. Tidak ada hibah yang ditentukan untuk 'root' pengguna pada host '%'

Mengejar
sumber
Jalankan SHOW GRANTS FOR rootdalam kueri, posting hasil dalam pertanyaan Anda.
NobleUplift
Anda mencoba mengakses database dari localhost atau dari host lain menggunakan MySQL Workbench?
Andy Jones
restart server dengan --skip-grant-table dan login dengan pengguna manapun dan berikan hak penuh untuk melakukan root dan restart server lagi tanpa opsi di atas
vidyadhar
@AndyJones tidak, ini ada di server khusus yang saya gunakan.
Mengejar
@vidyadhar Maaf, saya tidak yakin di mana saya akan melakukannya?
Mengejar

Jawaban:

52

Gunakan instruksi untuk mengatur ulang kata sandi root - tetapi alih-alih mengatur ulang kata sandi root, kami akan memasukkan secara paksa catatan ke tabel mysql.user

Di file init, gunakan ini sebagai gantinya

INSERT INTO mysql.user (Host, User, Password) VALUES ('%', 'root', password('YOURPASSWORD'));
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION;
Andy Jones
sumber
1
Saya minta maaf Andy, tetapi ketika saya mencapai langkah 6 saya terus mengalami masalah. Karena saya memang menggunakan wizard penginstalan, saya akan menggunakan "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.6\\my.ini" --init-file=C:\\mysql-init.txt Semuanya di tempat yang seharusnya dan apa yang Anda miliki di atas saya masukkan ke dalam file yang sesuai. Saya juga menghentikan layanan. Saya baru saja mendapatkan output ini: prntscr.com/1ilxau Dan semua (plugin) dimatikan. Sangat membingungkan.
Mengejar
2
apakah Anda menjalankan ini sebagai administrator?
Andy Jones
1
Di keterkejutan kebodohan saya, saya tidak. Setelah saya, saya mendapatkan prntscr.com/1imcnj ini - Pertama kali saya melakukannya di baris mereka sendiri (dari tempel) lalu saya taruh semuanya dalam satu baris. Maaf, ini sangat membingungkan saya, bukan ahli sql itu sendiri.
Mengejar
16
itu memberi: ERROR 1054 (42S22): Unknown column 'Password' in 'field list'kesalahan. @AndyJones
alper
1
Saya mendapatkan: Kolom tidak dikenal 'Kata sandi' dalam 'daftar bidang'
sricheta ruj
130

Jika Anda memiliki masalah yang sama di MySql 5.7. +:

Access denied for user 'root'@'localhost'

Itu karena MySql 5.7 secara default memungkinkan untuk terhubung dengan soket, yang berarti Anda cukup terhubung dengannya sudo mysql. Jika Anda menjalankan sql:

SELECT user,authentication_string,plugin,host FROM mysql.user;

maka Anda akan melihatnya:

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *497C3D7B50479A812B89CD12EC3EDA6C0CB686F0 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

Untuk mengizinkan koneksi dengan root dan kata sandi, perbarui nilai dalam tabel dengan perintah:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Current-Root-Password';
FLUSH PRIVILEGES;

Kemudian jalankan perintah pilih lagi dan Anda akan melihatnya telah berubah:

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *2F2377C1BC54BE827DC8A4EE051CBD57490FB8C6 | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *497C3D7B50479A812B89CD12EC3EDA6C0CB686F0 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

Dan itu dia. Anda dapat menjalankan proses ini setelah menjalankan dan menyelesaikan sudo mysql_secure_installationperintah.

Untuk mariadb, gunakan

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('manager');

untuk mengatur kata sandi. Selengkapnya di https://mariadb.com/kb/en/set-password/

KeitelDOG
sumber
1
Benar-benar Terima kasih saat koneksi Pembentukan di linux mint
Lova Chittumuri
Memperbarui dari auth_socketmenjadi mysql_native_passwordmemperbaiki masalah saya. Terima kasih!
olore
1
Ini benar-benar menyebalkan mencoba mencari tahu dan membuang-buang waktu. Saya berharap mereka menanyakan hal ini selama mysql_secure_installation. Terima kasih banyak atas jawaban ini.
PatPeter
ini juga membantu stackoverflow.com/questions/2995054/…
Abeer Sul
42

Itu tidak menyukai hak istimewa pengguna saya jadi saya SUDO itu. (di bash << sudo set user and password) (ini memberi nama pengguna root dan tidak mengatur kata sandi) (Di Mac)

sudo mysql -uroot -p
Dan Kaiser
sumber
27

Coba perintah berikut

~$ sudo /etc/init.d/mysql stop
~$ sudo mysqld_safe --skip-grant-tables &
~$ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 1 to server version: 4.1.15-Debian_1-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

mysql> use mysql;

mysql> update user set password=PASSWORD("root") where User='root';

mysql> flush privileges;

mysql> quit

~$ sudo /etc/init.d/mysql stop

Stopping MySQL database server: mysqld

STOPPING server from pid file /var/run/mysqld/mysqld.pid

mysqld_safe[6186]: ended

[1]+  Done                    mysqld_safe --skip-grant-tables

~$ sudo /etc/init.d/mysql start

~$ mysql -u root -p

* MySQL Community Server 5.6.35 is started
~$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.35 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, 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> 
aashish
sumber
11
Di MySQL 5.7, bidang kata sandi di bidang tabel mysql.user telah dihapus, sekarang nama bidang tersebut adalah 'authentication_string'.
Rumid
untuk versi mysql yang lebih baru mereka mengubah nama kolom kata sandi sebagai authentication_string
Ramesh Maharjan
sudo mysqld_safememberi saya ini /var/run/mysqld for UNIX socket file don't exists, kemudian setelah mkdir -p /var/run/mysqlddan sudo chown -R mysql:mysql /var/run/mysqld/berhasil dan memulai daemon.
kenzotenma
1
ERROR 2002 (HY000): Tidak dapat terhubung ke server MySQL lokal melalui soket '/var/run/mysqld/mysqld.so
Mostafa
19

untuk orang-orang yang menghadapi kesalahan di bawah ini dalam versi mysql 5.7+ -

Access denied for user 'root'@'localhost' (using password: YES)
  1. Buka terminal baru

  2. sudo /etc/init.d/mysql stop ... MySQL Community Server 5.7.8-rc dihentikan

  3. sudo mysqld_safe --skip-grant-tables & ini akan mengabaikan semua hak tingkat pemberian dan memulai mysql dalam mode aman Terkadang proses macet hanya karena

grep: kesalahan tulis: Pipa rusak 180102 11:32:28 mysqld_safe Masuk ke '/var/log/mysql/error.log'.

Cukup tekan Ctrl + Z atau Ctrl + C untuk menghentikan dan keluar dari proses

  1. mysql -u root

Selamat datang di monitor MySQL. Perintah diakhiri dengan; atau \ g. ID koneksi MySQL Anda adalah 2 Versi server: 5.7.8-rc MySQL Community Server (GPL)

Hak Cipta (c) 2000, 2015, Oracle dan / atau afiliasinya. Seluruh hak cipta.

Oracle adalah merek dagang terdaftar dari Oracle Corporation dan / atau afiliasinya. Nama lain mungkin merupakan merek dagang dari pemiliknya masing-masing.

Ketik 'bantuan;' atau '\ h' untuk bantuan. Ketik '\ c' untuk menghapus pernyataan masukan saat ini.

  1. mysql> use mysql;

Membaca informasi tabel untuk penyelesaian nama tabel dan kolom Anda dapat menonaktifkan fitur ini untuk memulai lebih cepat dengan -A

Database berubah

  1. mysql> update user set authentication_string=password('password') where user='root'; Query OK, 4 baris terpengaruh, 1 peringatan (0,03 detik) Baris cocok: 4 Berubah: 4 Peringatan: 1

  2. mysql> flush privileges; Kueri Oke, 0 baris terpengaruh (0,00 dtk)

  3. mysql> quit Dah

  4. sudo /etc/init.d/mysql stop

..180102 11:37:12 mysqld_safe mysqld dari file pid /var/run/mysqld/mysqld.pid berakhir. * MySQL Community Server 5.7.8-rc dihentikan arif @ ubuntu: ~ $ sudo /etc/init.d/mysql start .. * MySQL Community Server 5.7.8-rc dimulai

  1. mysql -u root -p

    Masukkan kata kunci:

    Selamat datang di monitor MySQL. Perintah diakhiri dengan; atau \ g. ID koneksi MySQL Anda adalah 2 Versi server: 5.7.8-rc MySQL Community Server (GPL)

setelah versi mysql 5.7+, kata sandi kolom diganti dengan nama authentication_string dari tabel mysql.user.

semoga langkah ini bisa membantu siapapun, terima kasih.

ArifMustafa
sumber
15

Saya menggunakan ubuntu 18 dan hanya menginstal MySQL (kata sandi: root) dengan perintah berikut.

sudo apt install mysql-server
sudo mysql_secure_installation

Ketika saya mencoba masuk dengan pengguna ubuntu biasa, itu membuat saya mengalami masalah ini.

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Tapi saya bisa login ke MySQL melalui super user. Dengan menggunakan perintah berikut, saya dapat masuk melalui pengguna biasa.

sudo mysql    
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
exit;

Maka Anda harus bisa login ke Mysql dengan akun biasa.

masukkan deskripsi gambar di sini

Nirojan Selvanathan
sumber
5

Jika Anda mendapatkan kesalahan ini di Workbench tetapi Anda dapat masuk dari terminal, ikuti langkah-langkah ini.

Pertama, cukup masuk dengan kata sandi Anda saat ini:

sudo mysql -u root -p

Kemudian ubah kata sandi Anda karena memiliki kata sandi berkekuatan rendah terkadang memberikan kesalahan.

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-strong-password';

FLUSH PRIVILEGES;

Kemudian cukup keluar dan masuk lagi dengan kata sandi baru Anda:

quit

sudo mysql -u root -p

Setelah Anda berhasil masuk, ketik perintah:

use mysql;

Ini harus menunjukkan pesan seperti 'Database berubah' lalu ketik:

UPDATE user SET plugin='mysql_native_password' WHERE User='root';

Setelah jenis itu:

UPDATE mysql.user set authentication_string=PASSWORD('new-strong-password') where user='root';

Lalu ketik:

FLUSH PRIVILEGES;

Kemudian cukup keluar:

quit

Sekarang coba masuk dengan kata sandi baru Anda di WORKBENCH Anda. Semoga berhasil. Terima kasih.

Tanmoy Bhowmick
sumber
4

Saya menghadapi masalah ini saat menginstal Testlink di server Ubuntu, saya mengikuti langkah-langkah ini

mysql -u root
use mysql;
update user set password=PASSWORD("root") where User='root';
flush privileges;
quit

Sekarang hentikan instance dan mulai lagi yaitu

sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start
Shridhar S Chini
sumber
2

Nah cara termudah untuk mereset kata sandi root adalah:

  • restart opsi mysqld --skip-grant-tables . Ini memungkinkan siapa saja untuk terhubung tanpa kata sandi dan dengan semua hak istimewa. Karena ini tidak aman, Anda mungkin ingin menggunakan --skip-grant-tables bersama dengan --skip-networking untuk mencegah klien jarak jauh terhubung.

  • Hubungkan ke server mysqld dengan perintah ini:

  • shell> mysql Terbitkan pernyataan berikut di klien mysql. Ganti kata sandi dengan kata sandi yang ingin Anda gunakan.

  • mysql> UPDATE mysql.user SET Kata Sandi = PASSWORD ('MyNewPass') -> WHERE User = 'root'; mysql> HAK ISTIMEWA FLUSH;

  • Hentikan server, lalu mulai ulang secara normal (tanpa opsi --skip-grant-tables dan --skip-networking).

Sumber dokumentasi Mysql dan pengalaman pribadi:

http://dev.mysql.com/doc/refman/5.6/en/resetting-permissions.html

Aneesh Vijendran
sumber
1

Saya menyelesaikan masalah yang sama dengan menjalankan Workbench sebagai administrator.

... Saya kira itu karena pembatasan pada komputer perusahaan, dalam kasus saya ...

Igor Šćepanović
sumber
0

Coba langkah-langkah berikut untuk mengatasi masalah ini:

  1. Buka terminal / command prompt dan arahkan ke folder bin dari folder instalasi MySQL. Lalu jalankan perintahnyamysqld --console .
  2. Jika Anda bisa melihat baris itu 171010 14:58:22 [Note] --secure-file-priv itu disetel ke NULL. Operasi yang terkait dengan mengimpor dan mengekspor data dinonaktifkan, setelah menjalankan perintah di atas dari prompt perintah.
  3. Maka Anda perlu memeriksa bahwa file mysqld apakah itu diblokir oleh Windows Firewall atau program lain.
  4. Jika itu diblokir oleh Windows Firewall maka perlu membuka blokir darinya dan menyimpan pengaturan.
  5. Untuk membuka blokir aplikasi mysqldatau mysql, ikuti langkah-langkah di bawah ini:
    1. Buka command prompt dan ketik wf.mscuntuk membuka pengaturan firewall.
    2. Klik Izinkan aplikasi atau fitur melalui Windows Firewall.
    3. Periksa mysqldatau mysqldcontoh tersedia dalam daftar dan centang kotak centang untuk domain, publik dan pribadi dan simpan pengaturan.
  6. Kembali ke folder bin dan coba lagi perintah dari langkah 1.
  7. Ini harus berfungsi dengan baik dan tidak menunjukkan kesalahan apa pun.

Seharusnya sekarang mungkin untuk menjalankan konsol MySQL tanpa masalah!

srinivas krithvik
sumber
0

Saya menyelesaikan masalah yang sama menggunakan sql berikutnya dan memulai ulang server MySQL:

update mysql.user set Select_priv='Y',Insert_priv='Y',Update_priv='Y',Delete_priv='Y',Create_priv='Y',Drop_priv='Y',Reload_priv='Y',Shutdown_priv='Y',Process_priv='Y',File_priv='Y',Grant_priv='Y',References_priv='Y',Index_priv='Y',Alter_priv='Y',Show_db_priv='Y',Super_priv='Y',Create_tmp_table_priv='Y',Lock_tables_priv='Y',Execute_priv='Y',Repl_slave_priv='Y',Repl_client_priv='Y',Create_view_priv='Y',Show_view_priv='Y',Create_routine_priv='Y',Alter_routine_priv='Y',Create_user_priv='Y',Event_priv='Y',Trigger_priv='Y',Create_tablespace_priv='Y'
where user='root';
Oleksandr Tsurika
sumber
0

Saya mengerjakan Access Denied for User 'root' @ 'localhost' (menggunakan kata sandi: YA) selama beberapa jam, saya telah menemukan solusi berikut,

The answer to this problem was that in the my.cnf located within
/etc/mysql/my.cnf

the line was either 
bind-address = 127.0.0.1 
            (or)
bind-address = localhost
            (or)
bind-address = 0.0.0.0

I should prefer that 127.0.0.1

I should also prefer 0.0.0.0, it is more flexible 
because which will allow all connections
Veera Prasad
sumber
0

Saya tidak berpikir Anda harus keluar dari --init-fileparameter:

"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.6\\my.ini" --init-file=C:\\mysql-init.txt

Seharusnya:

"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.6\\my.ini" --init-file=C:\mysql-init.txt

Yordania
sumber
0

untuk masalah di atas, kata sandi Anda dalam sistem harus cocok dengan kata sandi yang telah Anda lewati dalam program karena ketika Anda menjalankan program itu memeriksa kata sandi sistem karena Anda telah memberikan root sebagai pengguna sehingga memberi Anda kesalahan dan pada saat yang sama mencatat tidak dihapus dari database.

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
class Delete
{
    public static void main(String []k)
    {
        String url="jdbc:mysql://localhost:3306/student";

        String user="root";
        String pass="jacob234";
        try
        {
            Connection myConnection=DriverManager.getConnection(url,user,pass);
            Statement myStatement=myConnection.createStatement();
            String deleteQuery="delete from students where id=2";
            myStatement.executeUpdate(deleteQuery);
            System.out.println("delete completed");
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
    }
}

Simpan kata sandi sistem Anda sebagai jacob234 dan kemudian jalankan kode.

Koyel Sharma
sumber
0

Dengan saya ada masalah yang sama, tetapi itu disebabkan, karena saya menggunakan server mysql pada 32 (bit) dan meja kerja berjalan pada versi 64 (bit). server dan meja kerja harus memiliki versi yang sama.

xpress

xpress
sumber
0

Bagi saya, saya menggunakan MYSQLWorkbench dan portnya 3306 MAMP menggunakan 8889

Abdullah Tahan
sumber
0

Saya menghadapi masalah yang sama ketika saya mencoba menghubungkan database Mysql menggunakan aplikasi Laravel. Saya ingin merekomendasikan silakan periksa kata sandi untuk pengguna. Kata sandi MySQL tidak boleh memiliki karakter khusus seperti # , & , dll ...

Mohit Ramani
sumber
Di bluehost, menghapus karakter khusus dari kata sandi sebenarnya memperbaiki masalah.
Mena