tidak dapat menghapus “PENGGUNAAN GRANT”

15

Saya sedang menguji beberapa hal, dan menambahkan:

grant usage on statistics.* to cptnotsoawesome@localhost identified by 'password';

jadi sekarang ketika saya melakukannya

show grants for cptnotsoawesome@localhost;

Saya dapat melihat bahwa salah satunya adalah:

Grants for cptnotsoawesome@localhost
----------------------------------
GRANT USAGE ON *.* TO 'cptnotsoawesome'@'localhost' IDENTIFIED BY PASSWORD 'somePEW-PEWstring' 

Sekarang saya ingin menghapusnya karena saya pikir ini adalah bahaya keamanan, jadi saya lakukan:

REVOKE USAGE ON *.* FROM 'cptnotsoawesome'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

Tetapi masih menunjukkan bahwa USAGE memberikan dalam daftar hibah.

Grants for cptnotsoawesome@localhost
----------------------------------
GRANT USAGE ON *.* TO 'cptnotsoawesome'@'localhost' IDENTIFIED BY PASSWORD 'somePEW-PEWstring' 

Ada ide mengapa? Apa yang saya lakukan salah?

Katafalkas
sumber

Jawaban:

20

Di bawah tenda, ketika Anda melihat pengguna dengan USAGE saja, bahwa pengguna ditulis dalam tabel mysql.user dengan semua hak global dimatikan.

Anda awalnya menyatakan bahwa pengguna memiliki ini:

grant usage on statistics.* to cptnotsoawesome@localhost identified by 'password'; 

Anda harus melihat baris mysql.userdengan kata sandi MD5 dan semua global globs diatur ke N. Anda juga harus melihat baris di mysql.db dengan

  • user = 'cptnotsoawesome'
  • host = 'localhost'
  • db = 'statistik'
  • semua tingkat privat DB diatur ke 'Y'

Anda harus dapat melihatnya dengan kueri ini

SELECT * FROM mysql.db
WHERE user='cptnotsoawesome'
AND host='localhost'
AND db='statistics'\G

Ketika Anda menjalankan perintah REVOKE, Anda cukup menghapus baris dari mysql.db. Ini tidak menyentuh baris mysql.user. Dengan demikian, Anda masih bisa masuk ke mysql dan hanya memiliki priv untuk dijalankan

SHOW GLOBAL VARIABLES;
SHOW GLOBAL STATUS;

Jika ada database pengujian yang disebut testatau database yang memiliki 5 karakter pertama test_, (cari menggunakan itu SELECT * FROM mysql.db WHERE db LIKE 'test%';) maka pengguna dengan hanya USAGE dapat memiliki hak penuh untuk database pengujian. Saya menulis tentang ini di ServerFault Sep 2011 .

Jika Anda ingin menghapus baris dari mysql.user Anda bisa menjalankannya

DROP USER cptnotsoawesome@localhost;

atau

DELETE FROM mysql.user WHERE
WHERE user='cptnotsoawesome'
AND host='localhost';
FLUSH PRIVILEGES;
RolandoMySQLDBA
sumber
9

PENGGUNAAN berarti pengguna tidak memiliki hak istimewa apa pun.

You have to use 'DROP USER'. 

drop user cptnotsoawesome@localhost;

Anda tidak dapat benar-benar mencabut PENGGUNAAN, tanpa menjatuhkan pengguna. PENGGUNAAN adalah hak istimewa tingkat global.

lihat Tautan Ini .

Abdul Manaf
sumber
Saya akan melakukannya, jika itu melakukan sesuatu yang salah pada basis data, seperti jika itu adalah ancaman keamanan atau sesuatu seperti itu, jika tidak - saya boleh meninggalkannya
Katafalkas