16.04’deki normal kullanıcı hesabından mysql kullanıcı kökü olarak giriş yapamıyorum


203

Sadece paketleri ile birlikte Ubuntu 16.04 LTS yüklü php, mariadbve nginx. mysql_secure_installationRoot şifresini koştum ve değiştirdim.

Şimdi mysqlUbuntu'da normal kullanıcı hesabıyla giriş yaparken root hesabını kullanarak giriş yapmaya çalıştığımda erişim reddedildi.

Kullanarak giriş yaptığımda sudo mysql, mysql bana şifre bile sormuyor. Çalıştırırsam mysql_secure_installtioneski ayarların hiçbir zaman kalıcı olarak ayarlanmadığını görüyorum.

Neyi yanlış yapıyorum?

Yanıtlar:


359

Geçenlerde Ubuntu 15.04’ü 16.04’e yükselttim ve bu benim için çalıştı:

  1. İlk olarak, sudo mysql'e bağlanın

    sudo mysql -u root
    
  2. Db’de bulunan hesaplarınızı kontrol edin

    SELECT User,Host FROM mysql.user;
    +------------------+-----------+
    | User             | Host      |
    +------------------+-----------+
    | admin            | localhost |
    | debian-sys-maint | localhost |
    | magento_user     | localhost |
    | mysql.sys        | localhost |
    | root             | localhost |
    
  3. Geçerli kök @ localhost hesabını sil

    mysql> DROP USER 'root'@'localhost';
    Query OK, 0 rows affected (0,00 sec)
    
  4. Kullanıcıyı yeniden yarat

    mysql> CREATE USER 'root'@'%' IDENTIFIED BY '';
    Query OK, 0 rows affected (0,00 sec)
    
  5. Kullanıcınıza izin verin (ayrıcalıkları temizlemeyi unutmayın)

    mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
    Query OK, 0 rows affected (0,00 sec)
    
    mysql> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0,01 sec)
    
  6. MySQL'den çıkın ve sudo olmadan tekrar bağlanmayı deneyin.

Umarım bu birine yardımcı olur :)


16
Bu benim için çalışan tek şeydi, biri 16.04'te mysql-server'ı yüklediğinizde kök kullanıcı ile tam olarak ne olduğunu biliyor mu?
Ruggi

32
Tutun, %herhangi bir yerden ... uzaktan bağlanabileceğiniz anlamına gelmiyor mu ?
Stevie G

9
Satırı değiştirebilirsiniz: CREATE USER 'root' @ 'localhost' KİMLİĞİ BY '';
vladnev

11
Güvenlik açısından: güvensiz kök @ localhost mysql bağlantı modeli, yerel kalkınmanın ekmek ve tereyağı temelini oluşturur, ancak kesinlikle başka hiçbir yerde görünmemelidir.
Charney Kaye

5
Buradaki yeni kök kullanıcı için hibe ifadesi, köke "hibe ile" vermez, böylece kök bunu çalıştırmadan hibe veremez : dba.stackexchange.com/a/62046/115679 Lütfen hibe ifadesini değiştiringrant all privileges on *.* to 'root'@'localhost' with grant option;
Loren

132

5.7'yi yüklerseniz ve rootkullanıcıya bir şifre sağlamazsanız , auth_socketeklentiyi kullanır . Bu eklenti umursamıyor ve bir şifre gerektirmiyor. Sadece kullanıcının bir UNIX soketi kullanarak bağlanıp bağlanmadığını kontrol eder ve ardından kullanıcı adını karşılaştırır.

MySQL 5.7'deki Change User Password'den Alınan "plugin: auth_socket" ile

Yani plugingeri değiştirmek için mysql_native_password:

  1. Sudo ile giriş yap:

    sudo mysql -u root
    
  2. pluginTek bir komutla şifreyi değiştirin ve ayarlayın:

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';
    

Tabii ki boş bir şifre belirlemek için yukarıdaki komutu da kullanabilirsiniz.

Sadece kayıt için (ve MariaDB < 10.2kullanıcılar) pluginbir şifre sağlamadan değiştirmenin (boş bırakarak) başka bir yolu daha var :

update mysql.user set plugin = 'mysql_native_password' where User='root';
// to change the password too (credits goes to Pothi Kalimuthu)
// UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('secret') WHERE User = 'root';
FLUSH PRIVILEGES;

2
Teşekkürler, bir nedenden ötürü, bir apt-get yükseltmesinden sonra aniden otomatik olarak ayarlandı bence ...
Tominator

4
Ayrıca, bu cevabı daha çok seviyorum - çok daha az yıkıcı ;-)
benzkji

3
MariaDB <10.2 için, şifreyle birlikte eklentiyi değiştirmek için, şu sorgu: UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('secret') WHERE User = 'root'; FLUSH PRIVILEGES;Kaynak: stackoverflow.com/a/41537019/1004587
Pothi Kalimuthu 11:17 saat

5
Bu kabul edilen cevap olmalı
Geo C.

3
Keşke bunu iki kez oylayabilseydim.
James Smith,

21

Kısacası, MariaDB’de

UPDATE mysql.user SET plugin = 'mysql_native_password', 
      Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';

NEWPASSWORD'ü istediğiniz şifre ile değiştirin ve başka her şey konuşalım.

Buradaki sorun, MariaDB veya MySQL kurulduğunda / güncellendiğinde (özellikle bazı noktalarda bir parola olmadan ayarlanmışsa), o zaman Kullanıcılar tablosunda parolanın gerçekten boş (veya yok sayılmış) olması ve oturum açmanın sisteme bağlı kullanıcıya bağlı olmasıdır. MySQL kullanıcısına. Bunu, sistem köküne geçerek aşağıdaki gibi test edebilirsiniz ve ardından şunu yazın:

mysql -uroot -p

Ardından şifre veya yanlış şifre girin. Muhtemelen içeri girersiniz. ( # mysqlParola alakasız olduğu ve kullanıcı tanımlı olduğu için unix kökünden giriş bile yapabilirsiniz ).

Peki neler oluyor? Kök olarak giriş yapar ve aşağıdakileri yaparsanız:

select User,host,plugin from mysql.user; 
+----------------+-----------+-----------------------+
| User           | host      | plugin                |
+----------------+-----------+-----------------------+
| root           | localhost | auth_socket           |
+----------------+-----------+-----------------------+

auth_socket( unix_socketMariaDB'de okuyabilir ) not edersiniz . Bu soketler şifreleri yok sayar ve karşılık gelen Unix kullanıcısının şifre kontrolü yapmadan girmesine izin verir . Bu nedenle root ile giriş yapabilirsiniz ancak farklı bir kullanıcı ile giriş yapamazsınız .

Dolayısıyla çözüm, Kullanıcıları kullanmayacak şekilde güncellemek auth_socket/unix_socketve bir şifreyi uygun şekilde ayarlamaktır.

2017'den itibaren Ubuntu sürüm 16'da olan MariaDB'de (<10.2, aşağıya bakınız). Bu yeterli olacaktır. NEWPASSWORD şifrenizdir. mysql_native_passwordsen yazıyorsun

UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';

(Eklentiyi boş olarak ayarlamak işe yarayabilir. YMMV. Bunu denemedim. Bu bir alternatif.)

UPDATE mysql.user SET plugin = '', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';

Aksi takdirde:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASSWORD';

Sonra

FLUSH PRIVILEGES;

Kayıt için, kullanıcıyı silmeyi ve onu '%' ile yeniden oluşturmayı içeren çözüm, beni tamamen veritabanından hapsetmeme neden oldu ve grantaçıklamayı tamamen doğru yapmazsanız başka sorunlara neden olabilir - zaten sahip olduğunuz kökü güncellemeniz daha kolay.

Tecrübelerime göre, sorun yalnızca kök kullanıcı ile olur, çünkü diğer kullanıcılar ilk kurulum / güncellemenin bir parçası olarak el ile eklenmez.


2
Mükemmel çalışması için bunu buldum. Neden root şifresini değiştirmenin mysql_secure_installationaynı etkiye sahip olmadığını merak ediyorum . Yeni şifreyi nerede saklıyor?
Mausy5043

Cevabınızı düzenleyebilir ve gittiğiniz komutların her biri hakkında daha fazla bilgi verebilir misiniz? Hangisinin uygulanabilir olduğu konusunda net değilim. UPDATEMariaDB <10.2 ve ALTERdiğer sürümler için geçerli olan iki ler mi? İkincisi UPDATE, birincisine alternatif mi, yoksa ikisini de mi yazmamız gerekiyor? Son olarak, 'mysql_native_password' verbatim yazacak bir şey mi, yoksa MySQL için hedeflediğimiz kök şifre ile mi değiştirmeliyiz?
Michael Scheper

1
@MichaelScheper Bir süre önceydi, bu yüzden fazla düzenlemek istemiyorum, fakat hatırladığım şey bu. (1) Sadece ilk GÜNCELLEME yapın (<10.2 bir gereklilik olmayabilir). (2) Evet, 'mysql_native_password' verbatim yazın. Temel olarak, yaptığınız şey mariadb'e: "Unix ayrıcalıklarını kullanmayın, veritabanı ayrıcalıklarını kullanın" deyin. Bu mysql_native_passwordseçenek.
Gazzer

Lanet olsun 'ayrıcalık' yanlış yazılmıştı!
Gazzer

1
Görünüşe göre düzenleme zaman sınırını da sadece 1½ dakika kaçırdınız! Bazen ben de buna sinirleniyorum. Her neyse, teşekkürler!
Michael Scheper,

8

MySQL / MariaDB'yi temel havuzdan yüklediyseniz, kullanıcılar MySQL'e Unix girişlerinden MySQL kök kullanıcısı olarak giriş yapamazlar ( sudo erişimi varsa uygulanabilir değildir )

  1. MySQL kök kabuğuna giriş yapın:

    $ sudo mysql -u root -p
    
  2. Aşağıdaki sorguları yürütün:

    use mysql;
    update user set plugin='mysql_native_password' where user='root';
    flush privileges; 
    quit;
    
  3. Yeni bir kabuk açın, ardından:

    $ mysql -u root -p
    

Kaynak


Bunu yaptığımda, artık mysql'ı root olarak kullanamadım. İlk önce su içmem gerekti ve sonra mysql'ye root olarak giriş yapabildim. Bu yüzden auth_socket için geri değiştirdim.
kadar

Tek komut:mysql -u root -p -e "use mysql;update user set plugin='mysql_native_password' where user='root';flush privileges;"
Chris Stryczynski

MySQL örneğinize erişiminizi kaybetmek istiyorsanız, bu cevap kolay yoldur.
Danila Vershinin

2

Yeni mysql hesabı oluşturmaya çalışın, benim için çalıştı (mysql 5.7.12):

  1. Sudo olarak giriş yap:

    sudo mysql -uroot
    
  2. Yeni kullanıcı oluşturun ve ona ayrıcalıklar verin (şifre yok):

    CREATE USER 'admin'@'localhost' IDENTIFIED BY '';
    GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost';
    
  3. Yeni kullanıcı olarak giriş yapın:

    mysql -uadmin
    

2

İki şey yapmak zorunda kaldım (@Todor ve @Loremhipsum sayesinde):

update mysql.user set plugin = 'mysql_native_password' where User='root';
grant all privileges on *.* to 'root'@'localhost';

ve sonra:

FLUSH PRIVILEGES;

Kullanıcıyı bırakmayı tavsiye etmem root.


1

Önce bu kodu dene

echo "CREATE USER 'root'@'localhost' IDENTIFIED BY 'root';" > your_init_file.sql
echo "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;" >> your_init_file.sql 
echo "FLUSH PRIVILEGES;" >> your_init_file.sql

ve sonra,

killall mysqld
mysqld_safe --init-file=$PWD/your_init_file.sql

daha sonra , işlemi ön plandan arka plana geçirmek için Ctrl+Z: tuşuna basın ve: bgyazın ve erişiminizi şu şekilde doğrulayın:

mysql -u root -proot
mysql> show grants;

1

Kök kullanıcısı altında sadece mysql komutunu çalıştırırsanız, root @ localhost için soket kimlik doğrulaması etkin olduğundan şifre sorulmadan erişim verilir. .

Parola belirlemenin tek yolu, aşağıdaki gibi yerel kimlik doğrulamasına geçmektir:

$ sudo mysql

mysql> ALTER USER 'root' @ 'localhost' mysql_native_password BY 'test' ile tanımlanmıştır;


0

MariaDB'yi kullanmak için yarattığım bazı senaryoları uyarlıyorum ve bu konuyla karşılaştım. Burada birçok bilgiyi bir araya getirmek bir Gazzer'in cevabı gerçekten bu konuda sıfır olan; hepsi auth_socket/ unix_socketayarına kadar kaynar .

Bu nedenle, MariaDB 5.5 (Ubuntu 14.04 altında) ve MariaDB 10 (Ubuntu 16.04 altında) kullanırken, MySQL'e giriş yapmak ve bu komutu çalıştırmak işleri derhal temizledi:

UPDATE mysql.user SET plugin='' WHERE User='root';
FLUSH PRIVILEGES;

Diğer cevaplar - Loremhipsum'un bu yazıdaki en yüksek oyu alan cevabı da dahil olmak üzere - bir kullanıcıyı düşürmeyi önerip sonra onları yeniden yaratarak kötü uygulamaları gerçekten teşvik eder. Bana göre bu oldukça radikal bir çözüm. pluginDeğeri geçersiz kılmak, ayrıcalıkları ortadan kaldırmak ve hayata devam etmek için en iyi / en basit çözüm .


-1

Ben de aynı sorunu yaşadım ve aşağıdakileri çalıştırma sorunu çözdü:

mysql_upgrade --force

Ne yazık ki bu işe yaramadı. Ubuntu'yu yeniden yüklüyorum.
kodlayıcı

1
Yeni ubuntu 16.04'ü yeni yükledim ve mariad-server'ı kurdum. Kurduktan sonra mysql_secure_installation 'ı çalıştırdım ve şifreyi belirledim. Mysql_secure_installation bölümündeki adımların kalanından geçtikten sonra, tekrar çalıştırdım ve değişiklikleri kaydetmiyor gibi görünüyor. Hala normal kullanıcı hesabımdan giriş yapamıyorum. Bir böcek olabilir mi?
kodlayıcı

Bu asla yardım etmeyecek. Bu sorunun MariaDB ikili kodunun gerçek kurulumuyla hiçbir ilgisi yok, ancak kullanıcı standart dışı ayarlarla rootayarlandı plugin. DB'nin yükseltilmesinin böyle bir durumda yardımcı olabileceği tek durum, mysql_upgradeişlemin kendisinden pluginkuşku duyduğum ayarı oluşturmasıdır.
JakeGould
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.