MySQL root kullanıcısının tüm ayrıcalıklarını nasıl geri yükleyebilirim?


108

MySQL kök kullanıcımdan, tabloları değiştirme yeteneği de dahil olmak üzere bazı ayrıcalıkları yanlışlıkla kaldırdım. Bu kullanıcıyı orijinal durumuna (tüm ayrıcalıklarla) geri yükleyebilmemin bir yolu var mı?

UPDATE mysql.user SET Grant_priv = 'Y', Super_priv = 'Y' WHERE User = 'root';
# MySQL returned an empty result set (i.e. zero rows).
FLUSH PRIVILEGES ;
# MySQL returned an empty result set (i.e. zero rows).


#1045 - Access denied for user 'root'@'localhost' (using password: YES)
GRANT ALL ON *.* TO 'root'@'localhost'

1
İkinci hata bir şifre problemine benziyor. Muhtemelen zaten bir 'root' @ 'localhost' hesabınız olduğunu varsaydığım için benim hatam. Mysqld'yi --skip-grant-tables ve: "DROP USER 'root' @ 'localhost' ile yeniden çalıştırın; TÜM AYRICALIKLARI AÇIKLAYIN . 'Root' @ '%'; yerine? Hangi hesaba erişim vermeniz gerektiğini bulmanın en iyi yolu "SELECT User, Host FROM mysql.user WHERE User = 'root';" ... komutunu çalıştırmaktır ... bu size @ işaretinden sonra kullanılması gereken ana bilgisayar adını verecektir. GRANT komutundaki sembolü.
DMI

1
Modların konu dışı olmadığında konuyu konu dışı olarak işaretlemesi kötü bir biçimdir, ancak konuya daha uygun başka bir Stack Exchange sitesi olabilir ve bu durumda tanımlanması gerekir. ( Modlarda
Jon Davis

^ kabul etti, yeniden açılmasına oy verdim. eğer o en azından sözü olmalıydı DBA sitenin varlığından, nedeniyle kapalı ve OP bölgeye çevirmiştir. (Veya burada başka bir sorunun kopyası olarak potansiyel olarak kapatılmıştır)
bölünemez

Yanıtlar:


148

Çalışmazsa şunu GRANT ALLdeneyin:

  1. Durdurun mysqldve --skip-grant-tablesseçeneği ile yeniden başlatın .
  2. mysqldSunucuya sadece şu şekilde bağlanın: mysql(yani -pseçenek yok ve kullanıcı adı gerekli olmayabilir).
  3. Mysql istemcisinde aşağıdaki komutları verin:

    UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';

    FLUSH PRIVILEGES;

Bundan sonra, koşabilmeli GRANT ALL ON *.* TO 'root'@'localhost';ve çalıştırabilmelisin .


7
1. mysqld sunucusuna sadece: mysql ile nasıl bağlanılır 2. UPDATE mysql.user'ı verdiğimde SET Grant_priv = '1' WHERE User = 'root'; FLUSH AYRICALIKLARI; Sorgu tamam, 0 satır etkilendi (0,00 sn) satır eşleşti: 2 değişti: 0 uyarı: 0 Sorgu tamam, 0 satır etkilendi (0,00 sn). PhpMyAdmin'de kök kullanıcı olarak oturum açtığımda hala "Ayrıcalık yok" görüyorum.
Steven

Üzgünüz, yukarıdaki adımlardan sonra GRANT ALL komutunu çalıştırabilmelisiniz. Mysqld'ye bağlanmak için, bir şifreye ihtiyacınız olmayacağını kastettim - herhangi bir kullanıcı adının çalışıp çalışmayacağını veya "root" olması gerekip gerekmediğini hatırlayamıyorum.
DMI

2
Bu çalışmıyor. Steven'ın dediği gibi, kullanıcı tablosundaki güncelleme 0 kaydı etkiler . Kök kullanıcı izin veremez.
Cerin

1
Evet, işe yarıyor. Eğer pencerelerde iseniz, sadece geçici olarak eklemek skip-grant-tablesiçin [mysqld]şifre olmadan komut satırında erişim mysql Mysql yapılandırma dosyasının bölümüne.
markus

1
Hibe bölümünde (işe yaramadı) 9 saatten fazla kaldım ve cevabın beni kurtardı ... sen bir cankurtaransın. teşekkürler çok
Ali SH

91

rootKullanıcınızı yanlışlıkla sildiyseniz, bir şey yapabilirsiniz:

  1. MySQL hizmetini durdurun
  2. Çalıştırmak mysqld_safe --skip-grant-tables &
  3. Yazın mysql -u root -pve enter tuşuna basın.
  4. Şifrenizi girin
  5. Mysql komut satırına şunu girin: use mysql;

Ardından bu sorguyu yürütün:

insert into `user` (`Host`, `User`, `Password`, `Select_priv`, `Insert_priv`, `Update_priv`, `Delete_priv`, `Create_priv`, `Drop_priv`, `Reload_priv`, `Shutdown_priv`, `Process_priv`, `File_priv`, `Grant_priv`, `References_priv`, `Index_priv`, `Alter_priv`, `Show_db_priv`, `Super_priv`, `Create_tmp_table_priv`, `Lock_tables_priv`, `Execute_priv`, `Repl_slave_priv`, `Repl_client_priv`, `Create_view_priv`, `Show_view_priv`, `Create_routine_priv`, `Alter_routine_priv`, `Create_user_priv`, `ssl_type`, `ssl_cipher`, `x509_issuer`, `x509_subject`, `max_questions`, `max_updates`, `max_connections`, `max_user_connections`) 
values('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','','0','0','0','0');

sonra mysqld'yi yeniden başlatın

DÜZENLEME: 6 Ekim 2018

Başka birinin bu cevaba ihtiyacı olması durumunda, bugün innodb_version 5.6.36-82.0 ve 10.1.24- MariaDB'yi kullanarak denedim ve ARKATIKLARI KALDIRIRsanız çalışıyor (tek bir alıntı da yok, sadece onları kaldırın):

insert into user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv, Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv, Execute_priv, Repl_slave_priv, Repl_client_priv, Create_view_priv, Show_view_priv, Create_routine_priv, Alter_routine_priv, Create_user_priv, ssl_type, ssl_cipher, x509_issuer, x509_subject, max_questions, max_updates, max_connections, max_user_connections) 
values('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','','0','0','0','0');

1
@Bipin, Garip sadece orada mysqld.exeiçinde bin, klasörün değil mysqld_safe.exe. "Mysqld_safe" ile ne demek istiyorsun?
Pacerier

4
MySQL 5.5 için, iki kişiye daha ihtiyacınız var, Event_priv ve Trigger_priv.
Greg Bell


1
@Pacerier - bu gönderiye göre gerçekten ihtiyacınız yok mysqld_safe, sadece normal mysqld ikili dosyasını çalıştırın:mysqld.exe --skip-grant-tables
bkwdesign

2
ERROR 1054 (42S22): Unknown column 'Password' in 'field list'
Jamie Hutber

24

Ayrıca, root kullanıcısıyken mysql konsolunda görünmeyen kök ve veritabanı ayrıcalıklarını kaldırıyorum, bu nedenle kullanıcı mysql>mysql -u 'userName' -p;ve şifre ile değiştirildi ;

UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';

FLUSH PRIVILEGES;

bu komuttan sonra hepsi veritabanının kökte olduğunu gösterir.

Teşekkürler


1
Her şeyi bir arada yapmalıydım. Mysqld hizmetini durdurmam, ardından mysqld_safe --skip-crant-tabloları çalıştırmam ve ardından yukarıdaki UPDATE komutunu çalıştırmam, ardından mysql'yi yeniden başlatmam ve ardından GRANT ALL ON çalıştırmam gerekiyordu . K 'kullanıcı' @ 'localhost';
Nick Woodhams

5

Köklere ekleme ve yeniden yükleme ayrıcalıklarını reddettim. Dolayısıyla, izinleri güncelledikten sonra, FLUSH PRIVILEGES çalışmıyordu (yeniden yükleme ayrıcalığının olmaması nedeniyle). Bu yüzden user.root ayrıcalıklarını geri yüklemek için Ubuntu 16.04 üzerinde debian-sys-bakıcı kullanıcısını kullandım. User.debian-sys-Main'in şifresini bu dosyadan bulabilirsiniz.

sudo cat /etc/mysql/debian.cnf

Beni kurtardın! GRANT ne --skip-grant-tables modunda çalışmıyordu, bu yüzden ubuntu-system olarak girmek, root kullanıcımı yeniden oluşturmama izin veriyor ve tüm ayrıcalıkları güncelleyebiliyordum
lunix15

4
GRANT ALL ON *.* TO 'user'@'localhost' with GRANT OPTION;

Varsa, ilgili şifreyi kullanarak kökten oturum açın ve yukarıdaki komutu kullanıcı ne olursa olsun çalıştırın.

Örneğin:

GRANT ALL ON *.* TO 'root'@'%' with GRANT OPTION;

3
ancak 'kök' kullanıcı ayrıcalıklarını kaybettiyse, bu nasıl çalışabilir, kök kullanıcının bunu yapmak için yükseltilmiş ayrıcalıklara ihtiyacı olmaz mı? Bu benim için işe yaramadı.
Terungwa

3

Her sütun ayrıcalıklarına mysql.userdeğer ekleyin veya güncelleyin Y.


2

Yerel bilgisayarınızda WAMP kullanıyorsanız (mysql sürüm 5.7.14) Adım 1: my.ini dosyasını açın Adım 2: noktalı virgülü kaldırarak bu satırdaki 'skip-grant-tables' açıklamasını kaldırın 3. adımı: mysql'yi yeniden başlatın sunucu adımı 4: mySQL konsolunu başlatın adım 5:

UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;

Adım 6: Sorun çözüldü !!!!

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.