HATA 1698 (28000): 'root' @ 'localhost' kullanıcısı için erişim reddedildi


382

Yeni bir sunucu kuruyorum ve bu sorunla karşılaşmaya devam ediyorum.

MySQL veritabanına root kullanıcısıyla giriş yapmaya çalıştığımda hatayı alıyorum:

HATA 1698 (28000): 'root' @ 'localhost' kullanıcısı için erişim reddedildi

Terminalden (SSH), PHPMyAdmin veya bir Navyat gibi bir MySQL İstemcisi aracılığıyla bağlanmak önemli değil. Hepsi başarısız.

Mysql.user tablosuna baktım ve şunları elde ettim:

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

Gördüğünüz gibi, root erişimi olmalı.

Bir süredir bu sorunu gidermeye çalıştığım için Sunucu oldukça basit.

Ubuntu 16.04.1 LTS'yi Apache, MySQL ve PHP ile çalıştırır, böylece web sitelerini ve iRedMail 0.9.5-1'i barındırabilir, böylece postaları barındırabilir.

İRedMail'i kurmadan önce MySQL veritabanına giriş iyi çalışıyor. Ben de denedim, sadece iRedMail'i yükledim, ama sonra root da çalışmıyor ...

Birisi bana MySQL giriş sorunumu nasıl çözdüğümü veya iRedMail'i nasıl kurduğumu söyleyebilirse, mevcut bir MySQL kurulumunun üstüne. Ve evet Kurulum İpuçları'nı denedim ve bu değişkenleri yapılandırma dosyalarında bulamıyorum.


Bu bağlantıyı takip ettim ve ilk seçenek benim için çalıştı: askubuntu.com/questions/763336/…
Mikael Arhelger

3
sudo mysql_secure_installationdüzeltmek için en kolay yolu
Sergey Ponomarev

Yanıtlar:


1120

Ubuntu, mysql gibi bazı sistemler varsayılan olarak UNIX auth_socket eklentisini kullanır .

Temel olarak şu anlama gelir: Kullanan db_users , sistem kullanıcı kimlik bilgileriyle "yetkilendirme" olacaktır . rootAşağıdakileri yaparak kullanıcınızın bu şekilde ayarlanıp ayarlanmadığını görebilirsiniz :

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

Sorguda görebileceğiniz gibi, rootkullanıcı auth_socketeklentiyi kullanıyor

Bunu çözmenin 2 yolu vardır:

  1. Kök kullanıcıyı mysql_native_passwordeklentiyi kullanacak şekilde ayarlayabilirsiniz
  2. Yeni oluşturabilir db_usersizinle system_user(önerilir)

Seçenek 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

2. Seçenek: (YOUR_SYSTEM_USER ile sahip olduğunuz kullanıcı adını değiştirin)

$ 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

(Eğer seçenek 2. kullanırsanız, sistem adı olarak mysql bağlanmak gerekecek unutmayın mysql -u YOUR_SYSTEM_USER)

Not: Bazı sistemlerde (örn. Debian streç) 'auth_socket' eklentisine 'unix_socket' denir , bu nedenle karşılık gelen SQL komutu şöyle olmalıdır:UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

Güncelleme: Andy'nin comment güncellenen bu mysql 8.xx görünüyor @ / değiştirilmesi gelen auth_socketiçin caching_sha2_passwordben sorunu anlamak için yardımcı olacaktır ancak yukarıdaki adımları, bu test etmek MySQL 8.xx bir sistem kurulum yok. İşte cevap:

MySQL 8.0.4 sürümünden bir değişiklik, yeni varsayılan kimlik doğrulama eklentisinin 'caching_sha2_password' olmasıdır. Yeni 'YOUR_SYSTEM_USER' bu kimlik doğrulama eklentisine sahip olacak ve şimdi bash kabuğundan "mysql -u YOUR_SYSTEM_USER -p" ile giriş yapabilir ve bilgi isteminde bu kullanıcının şifresini girebilirsiniz. "UPDATE kullanıcı SET eklentisi" adımına gerek yoktur. 8.0.4 varsayılan kimlik doğrulama eklentisi güncellemesi için bkz. Https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/


5
Seçenek 1 benim için çalıştı. Ama sonra koşmam da gerekiyordu sudo gedit /etc/phpmyadmin/config.inc.php. Sonra onu AllowNoPasswordiçeren her iki satırı da aradım ve uncommented. Sonra şifre olmadan root olarak giriş yapabildim.
Joe

7
Seçenek 2 çalışır. Yeni bir kullanıcı oluşturmak ve orada olmak için ayrılmak kök kullanmak için her zaman en iyi uygulama olduğunu düşünüyorum!
PasinduJay

2
IDENTIFIED BY ''Bit muhtemelen olmalıdırIDENTIFIED BY 'YOUR_PASSWD'
YakovL

4
Son olarak, gerçekten işe yarayan bir cevap !! Orada mysqld_safe --skip-grant-tablesvb diyen milyonlarca cevap var ve işe yaramıyor.
Stewart

4
Tamam, bunu nasıl yapabilirim, eğer sudo mysql -u root -piçeri girmeme izin vermiyorsa?
Hrvoje T

173

Burayı kontrol et:

MYSQL'in YENİ Sürümü bu şekilde yapar.

Yeni my-sql'de kurulum sırasında şifre boş bırakılırsa auth_socketeklentiye dayanır .

Doğru yol, benim sql'ye sudoayrıcalıkla giriş yapmaktır.

$ sudo mysql -u root -p

Ve sonra parolayı şu şekilde güncelleyin:

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

Bu yapıldıktan stop and startsonra mysql sunucusu.

$  sudo service mysql stop
$  sudo service mysql start

Tüm ayrıntılar için bu bağlantıya başvurabilirsiniz .

Herhangi bir şüphe için yorum yapın.


4
Bu Ubuntu 18 kullanarak benim için çalıştı. Çok teşekkür ederim.
Peter Drinnan

10
Ubuntu

2
Tam aradığım şey. Thank you :) Ubuntu 18
Manthan_Admane

2
Bu bir cazibe gibi çalıştı, lubuntu 19.04
Kvvaradha

3
Bu iyi çalışıyor. Bağlantı faydalıdır.
kjohri

9

Windows 10 masaüstümde Putty aracılığıyla etkileşimde bulunduğum bir Debian 8 VM'de bu sorunu yaşıyordum.

Burada çeşitli öneriler denedim ama hiçbir şey oldukça çalıştı ve MariaDB Debian ana bilgisayar üzerinde çalışıyorum. Sonunda güvenli modda db sunucusunu başlatamadım ama gerekli değildi ve aşağıdaki komutlar aslında benim için çalıştı yani yeni oluşturulan bir MySql kullanıcı MySql / MariaDB sunucusuna giriş için izin:

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

Yukarıdakiler sizin için pek işe yaramazsa, zetacu'nun yukarıdaki yazısında ( zetacu ) belirtilen adımları izleyin ve ardından adımlarımı takip edin.

Şimdi bir uzak terminal istemcisi kullanabilmeniz ve şu komutu kullanarak güvenli bir şekilde mysql'de oturum açabilmeniz gerekir:

mysql -u your_user_name -p

* istendiğinde şifreyi yazın


Bu kadar basit. Peki, sadece ilk komut
ikinciyi

7

Mysql bağlantısını kaldırmanızı öneririm -

GÜNCELLEME-Bu, Mysql sürüm 5.5 içindir, sürümünüz farklıysa, lütfen ilk satırı buna göre değiştirin

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

Ve Tekrar Kur Ama bu sefer kendiniz bir root şifresi belirleyin. Bu çok fazla çaba tasarrufu sağlayacaktır.

sudo apt-get update
sudo apt-get install mysql-server

@ingernet belki de tekrar yüklerken ihmal ettiğiniz bazı sorunlar nedeniyle
Eminem347

@PJBrunet belki Mysql sürümünüz farklı neden olabilir
Eminem347

Yeterince adil, ama çok amaçlı bir çözüm en iyisidir.
PJ Brunet

6

Burada hiçbir çözüm olmadan saatlerce mücadele sonra, bu benim için çalıştı sonra şifre sütun şimdi authentication_string denir diyor bir youtube video bulundu. Şifremi aşağıdaki gibi değiştirebildim: Önce terminalden mysql'e geç

sudo mysql

sonra mysql içinde ne olursa olsun mysql yazın>

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

bu noktada mysql dışında normal terminal yerine geri dönersiniz. Bunun etkili olması için mysql'yi yeniden başlatmanız gerekir. bunun için aşağıdakileri yazın:

sudo service mysql restart

Daha iyi anlamak için bu video bağlantısına bakın


5

Aşama 1. sudo mysql -u root -p

Adım 2. USE mysql;

Aşama 3. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';

İşte 'admin' yeni şifreniz, siz değiştirebilirsiniz.

4. adım. exit

Teşekkürler. Bitirdiniz.


5

Sudo'ya gerek yok

Veritabanı 2 tüm ayrıcalık hesabıyla başlatılır: birincisi erişilemeyen "kök" ve ikincisi kullanıcı adınızla (komutla kontrol edin whoami).

Kök hesabına erişimi etkinleştirmek için kullanıcı adınızla giriş yapmanız gerekir

mysql -u $(whoami)

ve root şifresini manuel olarak değiştirme

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

'Root' olarak giriş yap

mysql -u root -p

MySQL'in gerçek sürümü için doğru cevap, teşekkürler!
Hugo S

3

İlk adım: /etc/phpmyadmin/config.inc.php adresine gidin ve ardından AllowNoPassword'u bulduğunuz önerileri kaldırın. İkinci adım: MySQL varsayılan hesabınıza giriş yapın

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

ve hepsi bu!


3

Bu benim için çalıştı:

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

3

Aynı sorunla ilk kez karşılaştım.

Şimdi düzeltildi:

İlk olarak, /etc/mysql/mysql.conf.d/mysqld.cnfdosyayı kopyalayıp içine geçmiş /etc/mysql/my.cnf.

Bunu komutla yapabilirsiniz:

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

Şimdi şifreyi dinleyelim:

Terminalinizde aşağıdaki komutları kullanın:

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

Şimdi mysql konsolunun içindesiniz.

O zaman root şifrenizi sıfırlamak için bazı sorular yazalım

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

Şimdi temizleyebiliriz /etc/mysql/my.cng

Yukarıdaki dosyayı düzenleyicinizde açın ve dosyanın içindeki tüm satırları kaldırın.

Bundan sonra mysql'yi yeniden başlatalım:

sudo mysql service restart 

Şimdi yeni oluşturulan şifreyle mysql kullanalım:

sudo mysql -u root -p

Son olarak yeni oluşturulan şifrenizi girin.


1
İyi çalıştı ! ama cevabının güncellenmesi gerekiyor !! /etc/mysql/my.cnf ve /etc/mysql/my.cng değil ve hizmet için sudo hizmetini yeniden başlatın mysql restart
essayoub

3

Çözümümü burada saatlerce araştırmadan sonra buldum.

MySQL'i Durdur

sudo service mysql stop

MySQL servis dizinini oluşturun.

sudo mkdir /var/run/mysqld

MySQL kullanıcısına servis dizinine yazma izni verin.

sudo chown mysql: /var/run/mysqld

MySQL'i izin kontrolleri veya ağ iletişimi olmadan manuel olarak başlatın.

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

Parola olmadan giriş yapın.

 mysql -uroot mysql

Şifreyi güncelle

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

MySQL'i kapatın.

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

MySQL hizmetini normal olarak başlatın.

sudo service mysql start

Başka bir şey olur ne zaman bu bana bir mysql istemi var! Teşekkürler!
UserX

2

MySQL'e root kullanıcısıyla erişmek istiyorsunuz ancak root'un doğru şifresini vermiyorsunuz.

Kök için yeni bir parola ayarlamanız gerekirse , MySQL'in sitesinde bunun nasıl yapılacağı ile ilgili harika belgeler bulunur: http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html

Ben edeceğiz buraya süreci göstermez çünkü MySQL belgelerine yukarıdaki linke açık ve anlaşılır olduğunu .


Anwser için teşekkürler, ama işe yaramadı, bu yüzden iRedMail yerine bir pgSQL veritabanı ile yüklemeyi seçtim.
Folkmann

Roger Folkman! Sorunu nasıl çözdüğünü bilmek güzel.
Cristian Gonçalves

Bağlantı kopuyor. mysql.com, yıllar boyunca birçok kopuk bağlantıya sahiptir. İlgili bilgileri buraya kopyalayıp yapıştırmanız gerekir; bu, kaynağı ilişkilendirdiğiniz sürece iyidir.
Kaz

1

os: Ubuntu18.04

MySQL: 5.7

  1. eklemek skip-grant-tablesmysqld.cnf dosya sonuna

  2. cp the my.cnf

sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf
  1. şifreyi sıfırla
(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. skip-grant-tablesmy.cnf dosyasından kaldır
(base)   ~ sudo emacs /etc/mysql/mysql.conf.d/mysqld.cnf 
(base)   ~ sudo emacs /etc/mysql/my.cnf                 
(base)   ~ sudo service mysql restart
  1. MySQL'i aç
(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. şifre politikasını kontrol et
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. yapılandırmasını değiştir 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)

unutmayın ne neden hata olduğunu bilmek gerekir? validate_password_policy?

politikayı doldurmak veya politikayı değiştirmek için şifrenizi sıfırlamaya karar vermelisiniz.


0

Bu da benim başıma geldi. Sorun zaten linux distro ile gelen mysql repo ile. Yani basitçe yaptığınızda: $ sudo apt install mysql-server mysql'yi bu sorunu veren varsayılan deposundan yükler. Yüklü mysql'i kaldırmanızın üstesinden gelmek için $ sudo apt remove mysql* --purge --auto-remove

Daha sonra resmi mysql web sitesinden mysql repo'yu indirin MySQL APT Repo Repo ekleme ve yükleme ile ilgili belgelerini izleyin. Bu hiçbir sorun yaratmaz. Ayrıca @zetacu tarafından yanıtlandığı gibi, mysql root'un gerçekten mysql_native_password eklentisi kullandığını doğrulayabilirsiniz.


0

benim durumumda,

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

Şifremin doğru olduğundan eminim, aksi takdirde hata kodu ERROR 1045 (28000): Access denied for user

sudo kullanarak yeniden giriş yapıyorum,

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

bu sefer benim için çalıştı. bkz docs

ve ardından root şifresini değiştirin,

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

mysql> 

sonra sunucuyu kullanarak yeniden başlatın sudo /etc/init.d/mysql restart

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.