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.