Akses ditolak untuk 'root' @ '%' pengguna

29

Saya biasa mengakses pengguna root di MySQL. Tetapi baru-baru ini, saya tidak lagi bisa.

Saya dapat masuk dengan baik:

 mysql -u root -p

Berikut adalah status mysql setelah login:

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
--------------

Tetapi ketika saya ingin melakukan tindakan apa pun, seperti:

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

Saya mengerti %digunakan untuk menandakan host apa pun, tetapi status saya dengan jelas menyatakan localhost. Apakah ada yang tahu apa yang sedang terjadi?

RolandoMySQLDBA
sumber

Jawaban:

17

Saya pikir Anda memiliki pengguna anonim

Coba jalankan ini:

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

Ini akan menunjukkan apa yang ada pengguna anonim. Kemungkinan besar, Anda akan melihat garis dengan pengguna kosong, host %, dan kata sandi kosong seperti yang ditunjukkan di bawah ini:

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     | %           |                                           |
+-----------+-------------+-------------------------------------------+

Jadi, bagaimana Anda masuk? Jalankan kueri ini:

SELECT USER(),CURRENT_USER();

Apa artinya ini bagimu?

  • USER () melaporkan bagaimana Anda mencoba mengotentikasi di MySQL
  • CURRENT_USER () melaporkan bagaimana Anda diizinkan untuk mengautentikasi di MySQL

Fungsi kedua CURRENT_USER()mengungkapkan bagaimana pengguna anonim mana yang digunakan untuk masuk.

Hak istimewa apa yang Anda miliki saat login?

Tolong jalankan

SHOW GRANTS;

Ini akan mengungkap hak istimewa apa yang Anda miliki pada saat Anda masuk. Fakta bahwa Anda diblokir dari membuat basis data menunjukkan bahwa Anda tidak melakukan root tetapi beberapa pengguna dengan hak istimewa lebih rendah.

Harap bersihkan hibah pengguna Anda.

Untuk mengatur ulang kata sandi root, silakan lakukan hal berikut:

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

Saya belajar metode efisien ini dari @ShlomiNoach .

Cobalah !!!

RolandoMySQLDBA
sumber
10

Saya tahu apa yang Anda lakukan.

Melakukan hal ini:

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

Anda mungkin akan melihatnya mengembalikan 'N' untuk Grant_priv. Jadi lakukan ini:

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

Dan walla! Semoga itu bisa membantu.

Kevin Florida
sumber
juga, untuk alasan keamanan, Anda harus selalu menghapus pengguna root setelah membuat dba baru .. pastikan mereka GRANT ALL PRIVILEGES kemudian pada akhirnya DENGAN GRANT OPTION .. bit itu penting.
Kevin Florida
Ini, dikombinasikan dengan penutupan, dan membuka kembali koneksi (dalam kasus saya dari HeidiSQL) berhasil!
xorinzor
4

Setelah Anda masuk sebagai rootpengguna, periksa hak istimewa Anda:

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

Setelah memeriksa hak istimewa Anda, Anda dapat mencoba memberi pengguna lain semua hak istimewa, atau Anda dapat mencoba memberikan rootlagi semua hak istimewa kepada pengguna:

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

Jika rootpengguna Anda tidak memiliki hak istimewa, Anda dapat mencoba memulihkannya, jadi:

Hentikan mysqldserver

Mulai ulang server dengan cara ini mysqld_safe --skip-grant-table

Kembalikan roothak istimewa dengan:

 mysql> flush privileges;
 mysql> grant all privileges on *.* to 'root'@'localhost' with grant option;
Atropo
sumber
Inilah yang saya dapatkan setelah hibah acara untuk perintah 'root' @ 'localhost': ERROR 1141 (42000): Tidak ada hibah yang ditentukan untuk pengguna 'root' di host 'localhost'
Apa output dari perintah kedua?
2
Ada cara "lebih baik" untuk melakukan ini di Debian, di mana Anda tidak perlu me-restart server. Sama seperti rootterhubung debian-sys-maint@localhostdan gunakan kata sandi di /etc/mysql/debian.cnf. Pengguna itu memiliki SEMUA hak istimewa di MySQL. Yang bagus adalah Anda tidak perlu me-restart server Anda.
Anders
Coba ini. sudo mysql --defaults-file = / etc / mysql / debian.cnf
Anders
0

Hak istimewa Anda dapat dikurangi?

Anda juga dapat mencoba membuat akun lain dengan hak akses root.

Dan hapus pengguna root, dan buat kembali dengan hak istimewa yang ditentukan.

Ini mungkin bermanfaat: http://dev.mysql.com/doc/refman/5.5/en/resetting-permissions.html

C.5.4.1.2 - LINUX (Buat file dengan kueri yang membuat, pengguna baru dengan hak root lengkap)

C.5.4.1.1 - Windows (Buat file dengan kueri yang membuat, pengguna baru dengan hak root penuh)

Kueri: (Buat pengguna root)

  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;

Manual MySQL Buat Pengguna: http://dev.mysql.com/doc/refman/5.5/en/adding-users.html

David Metcalfe
sumber