'Root' @ 'localhost' Kullanıcısı için Erişim Engellendi (şifre kullanarak: YES) - Ayrıcalık yok mu?


114

Bu hatayı sürekli alıyorum.

MySQL Workbench kullanıyorum ve bulduğum şey, kökün şema ayrıcalıklarının boş olduğu. Hiçbir ayrıcalık yok.

Sunucumun kullanıldığı platformlar arasında sorunlar yaşıyorum ve bu ani bir sorun oldu.

root@127.0.0.1 görünüşe göre çok fazla erişime sahip, ancak ben bu şekilde oturum açtım, ancak yine de localhost'a atıyor - localhost'un ayrıcalıkları yok.

Ben gibi bir kaç şey yapmış FLUSH HOSTS, FLUSH PRIVILEGESvb ama bu veya internetten hiçbir başarıyı yakaladı.

Erişimini nasıl geri alabilirim? Bunu sinir bozucu buluyorum çünkü etrafıma baktığımda insanlar sizin "erişiminizin" olmasını bekliyorlar ama benim erişimim yok, bu yüzden komut satırına veya herhangi bir şeye ve GRANTkendime hiçbir şeye giremiyorum.

Çalıştırdığımda SHOW GRANTS FOR rootkarşılığında şunu alıyorum:

Hata Kodu: 1141. '%' ana bilgisayarında 'root' kullanıcısı için böyle bir hibe tanımlanmadı


SHOW GRANTS FOR rootBir sorgu çalıştırın , sonucu sorunuza gönderin.
NobleUplift

Veritabanına localhost'tan mı yoksa MySQL Workbench kullanarak başka bir ana bilgisayardan mı erişmeye çalışıyorsunuz?
Andy Jones

sunucuyu --skip-grant-table ile yeniden başlatın ve herhangi bir kullanıcıyla oturum açın ve root ve sunucuyu yukarıdaki seçenek olmadan yeniden başlatmak için tam ayrıcalıklar sağlayın
vidyadhar

@AndyJones hayır, kullandığım özel bir sunucuda.
Chase

@vidyadhar Üzgünüm, bunu nerede yapacağımdan emin değilim?
Chase

Yanıtlar:


53

Kök parolayı sıfırlamak için talimatları kullanın - ancak kök parolayı sıfırlamak yerine, mysql.user tablosuna zorla bir kayıt EKLEYECEĞİZ

Init dosyasında bunun yerine bunu kullanın

INSERT INTO mysql.user (Host, User, Password) VALUES ('%', 'root', password('YOURPASSWORD'));
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION;

1
Üzgünüm Andy, ama 6. adıma geldiğimde bir sorunla karşılaşmaya devam ediyorum. Bir kurulum sihirbazı kullandığım için, "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 Her şey olması gerektiği yerde kullanacaktım ve yukarıda sahip olduğunuz şeyi buna göre dosyaya koydum. Hizmeti de durdurdum. Sadece şu çıktıyı aldım : prntscr.com/1ilxau Ve her şey (eklentiler) kapatıldı. Gerçekten kafa karıştırıcı.
Chase

2
bunu yönetici olarak mı çalıştırıyorsun?
Andy Jones

1
Aptallık sürprizimde değildim. Ben olduktan sonra, bu prntscr.com/1imcnj'yi aldım - Kendi satırlarında (yapıştırmadan) ilk kez yaptığımda hepsini tek bir satıra koydum. Üzgünüm, bu benim için çok kafa karıştırıcı, sql uzmanı için değil.
Chase

16
verir: ERROR 1054 (42S22): Unknown column 'Password' in 'field list'hata. @AndyJones
alper

1
Anlıyorum: 'alan listesinde' bilinmeyen 'Şifre' sütunu
sricheta ruj

135

Aynı problemi MySql 5.7. + 'Da yaşıyorsanız:

Access denied for user 'root'@'localhost'

Bunun nedeni MySql 5.7'nin varsayılan olarak sokete bağlanmasına izin vermesidir, bu da sadece bağlanmanız anlamına gelir sudo mysql. Sql çalıştırırsanız:

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

o zaman göreceksin:

+------------------+-------------------------------------------+-----------------------+-----------+
| 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)

Kök ve parola ile bağlantıya izin vermek için, tablodaki değerleri komutla güncelleyin:

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

Ardından select komutunu tekrar çalıştırın ve değiştiğini göreceksiniz:

+------------------+-------------------------------------------+-----------------------+-----------+
| 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)

Ve bu kadar. sudo mysql_secure_installationKomutu çalıştırıp tamamladıktan sonra bu işlemi çalıştırabilirsiniz .

Mariadb için kullanın

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

şifre belirlemek için. Daha fazlası https://mariadb.com/kb/en/set-password/


1
Gerçekten teşekkürler linux darphanede bağlantı kurulurken
Lova Chittumuri

Dan Güncellenmesi auth_socketiçin mysql_native_passwordsabit benim sorunum. Teşekkür ederim!
olore

1
Anlamaya çalışmak kesinlikle çileden çıkardı ve dev bir zaman kaybı. Keşke bunu da sorsalar mysql_secure_installation. Bu cevap için çok teşekkür ederim.
PatPeter


44

Kullanıcı ayrıcalığımı beğenmedi, bu yüzden SUDO. (bash << sudo set user ve password'de) (bu, root kullanıcı adını verir ve parolayı sıfır olarak ayarlar) (Mac'te)

sudo mysql -uroot -p

27

Aşağıdaki komutları deneyin

~$ 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> 

11
MySQL 5.7'de, mysql.user tablo alanındaki şifre alanı kaldırıldı, şimdi alan adı 'authentication_string'.
Rumid

mysql'nin daha yeni sürümü için şifre sütun adını authentication_string olarak değiştirdiler
Ramesh Maharjan

sudo mysqld_safebana bunu aldım /var/run/mysqld for UNIX socket file don't exists, sonra sonra mkdir -p /var/run/mysqldve sudo chown -R mysql:mysql /var/run/mysqld/işe yaradı ve arka plan programını başlattı.
kenzotenma

1
HATA 2002 (HY000): '/var/run/mysqld/mysqld.so soketi aracılığıyla yerel MySQL sunucusuna bağlanılamıyor
Mostafa

22

mysql 5.7+ sürümünde aşağıdaki hatayla karşılaşan kişiler için -

Access denied for user 'root'@'localhost' (using password: YES)
  1. Yeni terminal aç

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

  3. sudo mysqld_safe --skip-grant-tables & bu, tüm hibe seviyesi ayrıcalıklarını atlayacak ve mysql'yi güvenli modda başlatacaktır Bazen süreç,

grep: yazma hatası: Kırık boru 180102 11:32:28 mysqld_safe '/var/log/mysql/error.log' adresinde oturum açılıyor.

İşlemi kesmek ve işlemden çıkmak için Ctrl + Z veya Ctrl + C tuşlarına basmanız yeterlidir.

  1. mysql -u root

MySQL monitörüne hoş geldiniz. Komutlar; veya \ g. MySQL bağlantı kimliğiniz 2 Sunucu sürümü: 5.7.8-rc MySQL Topluluk Sunucusu (GPL)

Telif hakkı (c) 2000, 2015, Oracle ve / veya iştirakleri. Tüm hakları Saklıdır.

Oracle, Oracle Corporation ve / veya bağlı kuruluşlarının tescilli ticari markasıdır. Diğer isimler, ilgili sahiplerinin ticari markaları olabilir.

'Help;' yazın veya yardım için '\ h'. Mevcut giriş ifadesini temizlemek için '\ c' yazın.

  1. mysql> use mysql;

Tablo ve sütun adlarının tamamlanması için tablo bilgilerinin okunması -A ile daha hızlı başlatma için bu özelliği kapatabilirsiniz.

Veritabanı değişti

  1. mysql> update user set authentication_string=password('password') where user='root'; Sorgu Tamam, etkilenen 4 satır, 1 uyarı (0,03 sn) Eşleşen satırlar: 4 Değiştirildi: 4 Uyarı: 1

  2. mysql> flush privileges; Sorgu Tamam, 0 satır etkilendi (0,00 sn)

  3. mysql> quit Hoşçakal

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

..180102 11:37:12 /var/run/mysqld/mysqld.pid pid dosyasından mysqld_safe mysqld sona erdi. * MySQL Community Server 5.7.8-rc durduruldu arif @ ubuntu: ~ $ sudo /etc/init.d/mysql start .. * MySQL Community Server 5.7.8-rc başlatıldı

  1. mysql -u root -p

    Şifre girin:

    MySQL monitörüne hoş geldiniz. Komutlar; veya \ g. MySQL bağlantı kimliğiniz 2 Sunucu sürümü: 5.7.8-rc MySQL Topluluk Sunucusu (GPL)

mysql 5.7+ sürümünden sonra sütun parolası, mysql.user tablosundaki ad kimlik doğrulaması_dizesi ile değiştirildi.

umarım bu adımlar herkese yardımcı olur, teşekkürler.


15

Ubuntu 18 kullanıyordum ve aşağıdaki komutlarla MySQL (şifre: root) kurdum.

sudo apt install mysql-server
sudo mysql_secure_installation

Normal ubuntu kullanıcısı ile oturum açmaya çalıştığımda bana bu sorunu atıyordu.

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

Ama süper kullanıcı aracılığıyla MySQL'e giriş yapabildim. Aşağıdaki komutları kullanarak normal bir kullanıcı aracılığıyla oturum açabildim.

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

O zaman normal hesapla Mysql'e giriş yapabilmelisiniz.

görüntü açıklamasını buraya girin



6

Workbench'te bu hatayı alıyorsanız ancak terminalden giriş yapabiliyorsanız, bu adımları izleyin.

Öncelikle mevcut şifrenizle oturum açın:

sudo mysql -u root -p

Daha sonra parolanızı değiştirin çünkü düşük güçlü parolaya sahip olmak bazen hata verir.

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

FLUSH PRIVILEGES;

Ardından çıkın ve yeni şifrenizle tekrar oturum açın:

quit

sudo mysql -u root -p

Başarıyla oturum açtıktan sonra şu komutu yazın:

use mysql;

'Veritabanı değişti' gibi bir mesaj göstermeli ve ardından şunu yazmalıdır:

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

Bu tipten sonra:

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

Ardından şunu yazın:

FLUSH PRIVILEGES;

Ardından çıkın:

quit

Şimdi yeni şifrenizle ÇALIŞMA MASASINDA oturum açmayı deneyin. Umarım işe yarar. Teşekkür ederim.


4

Ubuntu sunucusuna Testlink'i kurarken bu problemle karşılaştım, şu adımları takip ettim

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

Şimdi örneği durdurun ve yeniden başlayın yani

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

2

Kök şifresini sıfırlamanın en kolay yolu şudur:

  • mysqld --skip-grant-tables seçeneğini yeniden başlatın . Bu, herkesin parola olmadan ve tüm ayrıcalıklarla bağlanmasını sağlar. Bu güvenli olmadığından, uzak istemcilerin bağlanmasını önlemek için --skip-grant-table'ları --skip-networking ile birlikte kullanmak isteyebilirsiniz.

  • Bu komutla mysqld sunucusuna bağlanın:

  • shell> mysql mysql istemcisinde aşağıdaki ifadeleri yayınlayın. Parolayı, kullanmak istediğiniz parola ile değiştirin.

  • mysql> GÜNCELLE mysql.user SET Şifre = ŞİFRE ('MyNewPass') -> NEREDE Kullanıcı = 'root'; mysql> FLUSH PRIVILEGES;

  • Sunucuyu durdurun, ardından normal şekilde yeniden başlatın (--skip-grant-tables ve --skip-networking seçenekleri olmadan).

Kaynak Mysql belgeleri ve kişisel deneyim:

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



1

Workbench'i yönetici olarak çalıştırarak aynı sorunu çözdüm.

... sanırım bunun sebebi benim durumumda şirket bilgisayarlarındaki kısıtlamalar ...


0

Bu sorunun üstesinden gelmek için aşağıdaki adımları deneyin:

  1. Terminal / komut istemini açın ve MySQL kurulum klasörünün bin klasörüne gidin. Ardından komutu çalıştırın mysqld --console.
  2. Bu satırın 171010 14:58:22 [Note] --secure-file-privNULL olarak ayarlandığını görüyorsanız . Verilerin içe ve dışa aktarılmasıyla ilgili işlemler, komut isteminden yukarıdaki komut çalıştırıldıktan sonra devre dışı bırakılır.
  3. Ardından mysqld, Windows Güvenlik Duvarı veya başka bir program tarafından engellendiğini kontrol etmeniz gerekir .
  4. Windows Güvenlik Duvarı tarafından engellenmişse, engellemesini kaldırmanız ve ayarları kaydetmeniz gerekir.
  5. mysqldVeya mysqluygulamanın engelini kaldırmak için aşağıdaki adımları izleyin:
    1. wf.mscGüvenlik duvarı ayarlarını açmak için komut istemine gidin ve yazın .
    2. Windows Güvenlik Duvarı üzerinden bir uygulamaya veya özelliğe izin ver seçeneğine tıklayın.
    3. Kontrol mysqldveya mysqldörnekleri listesinde mevcut olup kamu ve özel alan adı için onay kutusunu işaretleyin ve ayarları kaydedin.
  6. Bin klasörüne dönün ve 1. adımdaki komutu tekrar deneyin.
  7. İyi çalışmalı ve herhangi bir hata göstermemelidir.

MySQL konsolunu artık sorunsuz çalıştırmak mümkün olmalı!


0

Aynı sorunu bir sonraki sql kullanarak ve MySQL sunucusunu yeniden başlatarak çözdüm:

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';

0

'Root' @ 'localhost' Kullanıcısı için Erişim Engellendi (şifre kullanarak: YES) üzerinde birkaç saat çalıştım, aşağıdaki çözümü buldum,

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

0

--init-fileParametreden kaçmanız gerektiğini sanmıyorum :

"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

Olmalı:

"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


0

Yukarıdaki sorun için sistemdeki şifreniz, programda geçtiğiniz şifre ile eşleşmelidir çünkü programı çalıştırdığınızda, kullanıcı olarak root vermiş olduğunuz için sistem şifresini kontrol eder, böylece u bir hata verir ve aynı zamanda kayıt veritabanından silinmez.

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());
        }
    }
}

Sistem şifrenizi jacob234 olarak saklayın ve ardından kodu çalıştırın.


0

Benimle de aynı sorun vardı, ancak neden oldu, çünkü mysql sunucusunu 32 (bit) üzerinde kullanıyordum ve tezgah 64 (bit) sürümünde çalışıyordu. sunucu ve çalışma tezgahının aynı sürüme sahip olması gerekir.

xpress


0

Benim için MYSQLWorkbench kullanıyordum ve bağlantı noktası 8889 kullanan 3306 MAMP idi


0

Laravel uygulamasını kullanarak Mysql veritabanına bağlanmaya çalışırken aynı sorunla karşılaşıyordum. Tavsiye etmek isterim lütfen kullanıcının şifresini kontrol edin. MySQL şifresi # , & , vb. Gibi özel karakterler içermemelidir ...


Bluehost'ta, şifreden özel karakterlerin kaldırılması sorunu çözdü.
Mena
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.