HATA 1698 (28000): Kullanıcı 'root'@'localhost&#39 için erişim reddedildi;

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

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

ERROR 1698 (28000): Kullanıcı 'root'@'localhost&#39 için erişim reddedildi;

Terminal (SSH), PHPMyAdmin veya Navicat gibi bir MySQL İstemcisi aracılığıyla bağlanmam fark etmiyor. Hepsi başarısız oluyor.

mysql.user tablosuna baktım ve aşağıdakileri 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şimine sahip olmalıdır.

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

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

iRedMail'i yüklemeden önce MySQL veritabanına giriş yapmak sorunsuz çalışıyor. Ayrıca, sadece iRedMail'i yüklemeyi denedim, ancak daha sonra root da çalışmıyor ...

Birisi bana MySQL giriş sorunumu nasıl çözeceğimi veya mevcut bir MySQL kurulumunun üzerine iRedMail'i nasıl kuracağımı söyleyebilirse. Ve evet Kurulum İpuçları'i denedim ve yapılandırma dosyalarında bu değişkenleri bulamıyorum.

Çözüm

Ubuntu gibi bazı sistemlerde mysql varsayılan olarak UNIX auth_socket plugin kullanmaktadır.

Temel olarak şu anlama gelir: Bunu kullanan db_kullanıcıları, sistem kullanıcısı credentias tarafından "auth" olacaktır. `root' kullanıcınızın bu şekilde ayarlanıp ayarlanmadığını aşağıdakileri yaparak 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, root kullanıcısı auth_socket eklentisini kullanıyor

Bunu çözmenin iki yolu vardır:

  1. Kök kullanıcıyı mysql_native_password eklentisini kullanacak şekilde ayarlayabilirsiniz
  2. Sistem_kullanıcısıile yeni birdb_kullanıcısı` oluşturabilirsiniz (ö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

Seçenek 2:__ (YOUR_SYSTEM_USER yerine sahip olduğunuz kullanıcı adını yazın)

$ 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 2. seçeneği kullanırsanız mysql'e sistem kullanıcı adınızla bağlanmanız gerekeceğini unutmayın (mysql -u YOUR_SYSTEM_USER)

Not: Bazı sistemlerde (örneğin Debian stretch) 'auth_socket' eklentisi 'unix_socket' olarak adlandırılır, bu nedenle ilgili SQL komutu şöyle olmalıdır: UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

Güncelleme: andy'nin yorumuna göre mysql 8.x.x, caching_sha2_password için auth_socketi güncelledi/değiştirdi Bunu test etmek için mysql 8.x.x ile kurulmuş bir sistemim yok, ancak yukarıdaki adımlar sorunu anlamanıza yardımcı olacaktır. İşte cevap:

MySQL 8.0.4'ten itibaren yapılan bir değişiklik, yeni varsayılan kimlik doğrulama eklentisinin 'caching_sha2_password' olmasıdır. Yeni 'YOUR_SYSTEM_USER' bu auth eklentisine sahip olacaktır ve artık bash kabuğundan "mysql -u YOUR_SYSTEM_USER -p" ile giriş yapabilir ve istemde bu kullanıcı için parola girebilirsiniz. UPDATE user SET plugin" adımına gerek yoktur. 8.0.4 varsayılan auth eklentisi güncellemesi için bkz. https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/

Yorumlar (23)

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

UPDATE-Bu Mysql 5.5 sürümü 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 Yükleyin Ancak bu sefer kendiniz bir root şifresi belirleyin. Bu çok fazla çaba harcamanızı önleyecektir.

sudo apt-get update
sudo apt-get install mysql-server
Yorumlar (3)

MySQL'e root kullanıcısı ile erişmek istiyorsunuz ancak root'a doğru şifreyi vermiyorsunuz.

root** için yeni bir parola belirlemeniz gerekiyorsa, MySQL'in sitesinde bunun nasıl yapılacağına dair harika belgeler bulunmaktadır: http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html

İşlemi burada göstermeyeceğim çünkü MySql belgeleri yukarıdaki bağlantıda açık ve nettir.

Yorumlar (3)