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


23

Xubuntu 15.04 üzerinde çalışıyorum. MariaDB-Server'ı çeşitli sistemlere kurdum ve kurulum sırasında her zaman root şifresi istendi. Ancak bu sefer, şifre sorulduğunu hatırlamıyorum. Şifre olmadan giriş yapmayı denediğimde (veya boş bir şifre) Access denied for user 'root'@'localhost'hatayı alıyorum. Paketi tamamen kaldırmayı denedim

sudo apt-get remove mariadb-server
sudo apt-get purge mariadb-server

Yeniden kurduğum zaman, hala root şifresi sorulmadı.

Access 'in' root '@' localhost 'kullanıcısı tarafından engellendiğini düzeltmek için mysqlmysqld --skip-grant-tables yaklaşımını denedim . Mysql veritabanındaki kök kullanıcı şifresini değiştirebilirim - en azından hash değeri değişiyor - fakat mysql sunucusunu yeniden başlattıktan sonra hala yeni şifre ile giriş yapamıyorum. Ben hala aynı hatayı alıyorum.

Kullanıcı debian-sys-maint mevcut değil. Yani hiçbir şeyi düzeltmek için kullanamıyorum.

Başka ne deneyebileceğim konusunda fikrin var mı?


StackOverflow'ta aynı soruyu soran faydalı bir konu: stackoverflow.com/questions/39281594/…
Kevin - Reinstate Monica

Yanıtlar:


36

Şifreyi sıfırlamanız gerekir. bunun için

sudo mysql -u root
use mysql;
update user set plugin='' where User='root';
flush privileges;
exit;

9
Bu yaklaşıma açık olmayan "sihir", kök işletim sistemi kullanıcısının plugin: auth_socketvarsayılan olarak etkin olduğu için bir şifre belirtmek zorunda kalmadan veritabanına giriş yapabilmesidir . Başka bir deyişle, --skip-grant-tablesgeçmiş MySQL sürümlerinde gerekli olacak şekilde kullanmak gerekmez. (Ayrıca, teknik olarak, bu önlem "şifreyi sıfırlamak" değildir; bir eklentiyi devre dışı bırakmaktadır.)
Ben Johnson

1
+1, nedenini açıklayabilir misiniz?
A1Gard

4
Bu yaklaşım daha sonra sorunlara neden olacaktır. Eklentiyi devre dışı bırakırsanız, günlük cron işi, bu eklentiyle oturum açabileceğini varsaydığı gibi kırılır. Ayrıntılar için cevabımı gör.
colan,

11

Yeni kurulumdaki fikir, şifreleri hiç kullanmamanız gerektiğidir. Ayrıntılar için UNIX_SOCKET Kimlik Doğrulama Eklentisine bakın.

Özellikle alakalı olan şey, Ubuntu 16.04'te /usr/share/doc/mariadb-server-10.0/README.Debian.gz içeriğinin :

Yeni kurulumlarda hiçbir kök şifre belirlenmemiş ve artık debian-sys-maint kullanıcısı oluşturulmamıştır. Bunun yerine, MariaDB kök hesabının unix soketi kullanılarak kimliği doğrulanacak şekilde ayarlanmıştır, örneğin root veya sudo aracılığıyla herhangi bir mysqld çağrısı, kullanıcının mysqld komut istemini görmesine izin verecektir.

MySQL kullanıcı "root" asla asla silemezsiniz. Parola ayarlanmamış olmasına rağmen, unix_auth eklentisi yalnızca yerel olarak root kullanıcı olarak çalıştırılabildiğinden emin olur.

/Etc/mysql/debian.cnf dosyasındaki kimlik bilgileri, sunucuyu durdurmak ve oturum açma işlemini gerçekleştirmek için init komut dosyaları tarafından kullanılan kullanıcıyı belirtir. Bu artık artık root olarak kullanılmayan debian-sys-maint kullanıcısıydı.

Bu nedenle, root için bu eklentiyi devre dışı bırakıp bir şifre ayarladıysanız, günlük cron işi şifre olmadan root olarak giriş yapacağı varsayılarak kırılır, ancak plug-in ile.

Daha sonra diyor ki:

Scriptler kullanıcı tarafından gerekli hibelere sahip olmalı ve unix_socket ile tanımlanmalıdır.

Bu yüzden şifreler artık uygulamalar tarafından kullanılmamalıdır.


1
Az önce tanımladığınız çok sorunla karşılaştım: "So if you disable that plug-in for root and set a password, the daily cron job will break as it's assuming it will log in as root without a password..."Etkinleştirilen UNIX_SOCKET Kimlik Doğrulama Eklentisinin (şu anda varsayılan olan) açık olmayan bir şekilde gösterilmesi, birinin root veritabanı kullanıcısı olarak bir parola ile kimlik doğrulama yeteneğinin devre dışı bırakılmış olmasıdır. Mariadb.com/kb/en/mariadb/unix_socket-authentication-plugin adresinde hiçbir yerde bu önemli sınırlama belirtilmemiştir. Buna göre, örneğin SSH üzerinden root olarak giriş yapmak mümkün değildir.
Ben Johnson

2

Bu yazının cevabını izleyerek sorunu çözdüm:

MySQL (MariaDB) kök şifresini sıfırlayamıyorum

Bir bütün mysql.user eklenti alanını boş bir dizeye değiştirmek zorunda.


Bu konu burada açıklanmaktadır: percona.com/blog/2016/03/16/…
antonu17

3
Bu yaklaşım daha sonra sorunlara neden olacaktır. Eklentiyi devre dışı bırakırsanız, günlük cron işi, bu eklentiyle oturum açabileceğini varsaydığı gibi kırılır. Ayrıntılar için cevabımı gör.
colan,

1

Kurulumdan hemen sonra bu komutu çalıştırarak yaptım:

$ sudo mysql_secure_installation

İlk adımda, şifre boştur, bu yüzden sadece Enter tuşuna basın.


1
Zaten ayarlanmışsa boş değil, ki unutulmuş pw'm…… hala giriş yapamıyorum
Dave Everitt

0

Aynı konuda bir ahududu pi ile streç vardı. Çözümüm, aşağıdakileri yaparak tüm ayrıcalıklara sahip yeni bir kullanıcı oluşturmaktı:

sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root

MariaDB [(none)]> use mysql
MariaDB [mysql]> FLUSH PRIVILEGES;
GRANT ALL privileges ON mysql.* TO 'admin'@'localhost' with grant option;

Şimdi kullanıcı girişi yapabilir ve süper kullanıcı olarak "admin" kullanıcısını kullanabilirim.

Umarım bu birine yardım edecek.


0

Sadece kullan sudo mysql -u root- bu kadar


Ayrıntılar: Yeni sürümler, sistem kimlik doğrulaması kullanarak mysql için kimlik doğrulaması yapar. Öyleyse işletim sistemine geçmeyi başarabilirseniz, sizin de db root olduğunuz varsayılır. Bunu yayınlayarak onaylayabilirsiniz sudo mysql -u root -e "USE mysql; SELECT User, Host, plugin FROM mysql.user;". Böyle bir şey görmelisin (belki auth_socketbaşka dağıtımlarda)

+------+-----------+-------------+
| User | Host      | plugin      |
+------+-----------+-------------+
| root | localhost | unix_socket |
+------+-----------+-------------+

Root olarak giriş yaptım, fakat benim için bu komut hala unutmuş olduğum MariaDB root şifresini istiyor …
Dave Everitt
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.