Erişim 'kök' @ '%' kullanıcısı için reddedildi


29

MySQL'da root kullanıcısına sadece gayet iyi erişirdim. Ama son zamanlarda, artık yapamam.

İyi giriş yapabilirim:

 mysql -u root -p

Giriş yaptıktan sonra mysql durumu:

mysql> status
--------------
mysql  Ver 14.14 Distrib 5.5.28, for debian-linux-gnu (i686) using readline 6.2

Connection id:      37
Current database:   
Current user:       root@localhost
SSL:            Not in use
Current pager:      stdout
Using outfile:      ''
Using delimiter:    ;
Server version:     5.5.28-0ubuntu0.12.04.3 (Ubuntu)
Protocol version:   10
Connection:     Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:        /var/run/mysqld/mysqld.sock
Uptime:         4 min 16 sec

Threads: 1  Questions: 112  Slow queries: 0  Opens: 191  
Flush tables: 1  Open tables:  6  Queries per second avg: 0.437
--------------

Ancak, herhangi bir işlem yapmak istediğimde:

mysql> CREATE DATABASE moyennegenerale;
ERROR 1044 (42000): Access denied for user 'root'@'%' to database 'moyennegenerale'

Anladığım kadarıyla %herhangi bir ana bilgisayarı belirtmek için kullanılır, ancak durumum açıkça yerel ana bilgisayarı belirtir. Birileri neler olup bittiği hakkında bir fikri var mı?

Yanıtlar:


17

Sanırım anonim kullanıcılarınız var

Bunu çalıştırmayı deneyin:

SELECT user,host,password FROM mysql.user WHERE user='';

Bu isimsiz kullanıcıların neler olduğunu gösterecektir. Büyük olasılıkla, %aşağıda gösterildiği gibi boş bir kullanıcı, ana bilgisayar ve boş bir şifre içeren bir satır göreceksiniz :

mysql> select user,host,password from mysql.user;
+-----------+-------------+-------------------------------------------+
| user      | host        | password                                  |
+-----------+-------------+-------------------------------------------+
| lwdba     | 127.0.0.1   | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| lwdba     | localhost   | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| lwdba     | %           | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| root      | localhost   | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| root      | 127.0.0.1   | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| vanilla   | localhost   |                                           |
| mywife    | %           |                                           |
|           | %           |                                           | <<<--- LOOK !!!
| replicant | 10.64.113.% | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| kumar     | %           |                                           |
+-----------+-------------+-------------------------------------------+

Peki, nasıl giriş yaptınız? Bu sorguyu çalıştır:

SELECT USER(),CURRENT_USER();

Bu size ne anlatıyor?

  • USER (), MySQL'de nasıl kimlik doğrulaması yapmaya çalıştığınızı bildirir.
  • CURRENT_USER (), MySQL'de nasıl kimlik doğrulamanıza izin verildiğini bildirir.

İkinci işlev CURRENT_USER(), hangi anonim kullanıcının oturum açmak için nasıl kullanıldığını ortaya koymaktadır.

Giriş yaparken hangi ayrıcalıklara sahiptiniz?

Lütfen koş

SHOW GRANTS;

Bu, oturum açtığınız sırada sahip olduğunuz hangi ayrıcalıklara sahip olduğunuzu açığa çıkarır.

Lütfen kullanıcı bağışlarınızı temizleyin.

Kök şifresini sıfırlamak için, lütfen aşağıdakileri yapın:

echo "SET PASSWORD FOR root@localhost=PASSWORD('password');" > /var/lib/mysql/rootpwd.sql
service mysql restart
rm -f /var/lib/mysql/rootpwd.sql

Bu verimli yöntemi @ShlomiNoach'tan öğrendim .

Bir şans ver !!!


10

Ne yaptığını biliyorum.

Bunu yap:

SELECT `User`, `Grant_priv` FROM `mysql`.`user` WHERE `User` = 'root';

Muhtemelen Grant_priv için 'N' döndürdüğünü fark edeceksiniz. Öyleyse şunu yap:

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

Ve Walla! Umarım yardımcı olur.


ayrıca, güvenlik nedenleriyle, yeni bir dba oluşturduktan sonra her zaman root kullanıcısını silmelisiniz.
— Kevin Florida

Bu, kapanma ve bağlantıyı yeniden açma ile birleştirildiğinde (benim durumumda HeidiSQL'den) hile yaptı!
— xorinzor 14

4

rootKullanıcı olarak girdikten sonra ayrıcalıklarınızı kontrol edin:

 mysql> show grants for 'root'@'localhost';

Ayrıcalıklarınızı kontrol ettikten sonra, başka bir kullanıcıya tüm ayrıcalıkları vermeye çalışabilir veya rootkullanıcıya tüm ayrıcalıkları tekrar vermeye çalışabilirsiniz :

 mysql> grant all privileges on *.* to 'root'@'localhost';

Senin Eğer rootkullanıcı ayrıcalıklara sahip değil bunu, onları geri deneyebilirsiniz:

mysqldSunucuyu durdur

Sunucuyu bu şekilde yeniden başlatın mysqld_safe --skip-grant-table

rootAyrıcalıkları şununla geri yükle :

 mysql> flush privileges;
 mysql> grant all privileges on *.* to 'root'@'localhost' with grant option;

Şovdan sonra 'root' @ 'localhost' komutunu verdikten sonra elde ettiğim şey bu: ERROR 1141 (42000): 'localhost' ana bilgisayarında 'root' kullanıcısı için tanımlanmış bir hibe yok

İkinci komutun çıktısı nedir?

2
Sunucuyu yeniden başlatmanız gerekmeyen Debian'da bunu yapmanın "daha iyi" bir yolu var. Aynen rootbağlan debian-sys-maint@localhostve şifreyi kullan /etc/mysql/debian.cnf. Bu kullanıcının MySQL'de TÜM ayrıcalıkları var. İşin iyi yanı, sunucunuzu yeniden başlatmanıza gerek olmamasıdır.
— Anders

Bunu dene. sudo mysql --defaults-file = / etc / mysql / debian.cnf
— Anders,

0

Ayrıcalıklarınız azaltılabilir mi?

Ayrıca, kök ayrıcalıklara sahip başka bir hesap oluşturmayı deneyebilirsiniz.

Kök kullanıcıyı silin ve belirtilen ayrıcalıklarla yeniden oluşturun.

Bu yardımcı olabilir: http://dev.mysql.com/doc/refman/5.5/en/resetting-permissions.html

C.5.4.1.2 - LINUX (Sorgu yapan dosyayı oluşturun, tam root yetkilerine sahip yeni bir kullanıcı olun)

C.5.4.1.1 - Windows (Kök ayrıcalıklara sahip yeni bir kullanıcı olan, sorgu yapan dosyayı oluşturun)

Sorgu: (Kök kullanıcı oluştur)

  CREATE USER 'new_root'@'%' IDENTIFIED BY '***';
  GRANT ALL PRIVILEGES ON *.* TO 'new_root'@'%' IDENTIFIED BY '***' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;

MySQL El Kitabı Kullanıcı Yarat: http://dev.mysql.com/doc/refman/5.5/en/adding-users.html

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.