Mengapa "GRANT USAGE" dibuat saat pertama kali saya memberikan hak istimewa pengguna?

102

Saya baru mengenal sisi admin DBMS dan sedang menyiapkan database baru malam ini (menggunakan MySQL) ketika saya memperhatikan ini. Setelah memberi pengguna hak istimewa untuk pertama kalinya, pemberian lain dibuat seperti itu

GRANT USAGE on *.* TO user IDENTIFIED BY PASSWORD password

Dokumentasi mengatakan bahwa USAGEhak istimewa berarti "tidak ada hak istimewa," jadi saya menyimpulkan bahwa hibah bekerja secara hierarki dan mungkin pengguna harus memiliki semacam hak istimewa untuk semua database, jadi ini berfungsi sebagai tangkapan semua?

Saya juga tidak mengerti mengapa baris ini memiliki IDENTIFIED BYklausa di dalamnya ketika hibah yang saya buat tidak memiliki IDENTIFIED BYklausa (terutama karena saya tidak mengerti tujuan klausa tersebut).

Edit: Maaf untuk tidak menyatakan ini awalnya, hibahnya

GRANT ALL PRIVILEGES ON database.* TO admin_user
GRANT SELECT, INSERT, UPDATE, DELETE ON database.* TO user
John M Naglick
sumber
dapatkah Anda memberi tahu kami hibah yang telah Anda jalankan
Pentium10

Jawaban:

145

Seperti yang Anda katakan, di MySQL USAGEidentik dengan "tidak ada hak istimewa". Dari Manual Referensi MySQL :

Penentu hak istimewa USAGE adalah singkatan dari "tidak ada hak istimewa." Ini digunakan di tingkat global dengan GRANT untuk mengubah atribut akun seperti batas sumber daya atau karakteristik SSL tanpa memengaruhi hak istimewa akun yang ada.

USAGEadalah cara untuk memberi tahu MySQL bahwa ada akun tanpa memberikan hak istimewa apa pun ke akun itu. Mereka hanya memiliki izin untuk menggunakan server MySQL USAGE. Ini sesuai dengan baris dalam `mysql`.`user`tabel tanpa set hak istimewa.

The IDENTIFIED BYklausul menunjukkan bahwa password ditetapkan untuk pengguna tersebut. Bagaimana kita tahu bahwa pengguna adalah yang mereka katakan? Mereka mengidentifikasi diri mereka sendiri dengan mengirimkan kata sandi yang benar untuk akun mereka.

Kata sandi pengguna adalah salah satu atribut akun tingkat global yang tidak terkait dengan database atau tabel tertentu. Itu juga tinggal di `mysql`.`user`meja. Jika pengguna tidak memiliki hak istimewa lain ON *.*, mereka diberikan USAGE ON *.*dan hash kata sandi mereka ditampilkan di sana. Ini sering merupakan efek samping dari CREATE USERpernyataan. Ketika seorang pengguna dibuat dengan cara itu, mereka awalnya tidak memiliki hak istimewa sehingga mereka hanya diberikan USAGE.

Espresso_Boy
sumber
10
Saya pikir itu karena mereka diizinkan untuk mengotentikasi. Jika Anda mencoba dengan pengguna atau / dan kata sandi yang salah, Anda tidak dapat mengautentikasi. Pengguna dengan hak istimewa USAGE dapat menjalankan perintah SQL tertentu seperti 'pilih 1 + 1' dan 'tampilkan daftar proses'.
Mircea Vutcovici
11

Saya mencoba untuk menemukan arti GRANT USAGE on *.* TOdan ditemukan di sini. Saya bisa mengklarifikasi yang GRANT USAGE on *.* TO user IDENTIFIED BY PASSWORD passwordakan diberikan ketika Anda membuat pengguna dengan perintah berikut ( CREATE):

CREATE USER 'user'@'localhost' IDENTIFIED BY 'password'; 

Saat Anda memberikan hak istimewa GRANT, hak istimewa baru akan ditambahkan di atasnya.

5YrsLaterDBA
sumber
3

Selain kata sandi mysql ketika tidak menggunakan IDENTIFIED BYklausa, mungkin nilai kosong, jika tidak kosong, mereka dapat dienkripsi. Tapi yaUSAGE digunakan untuk mengubah akun dengan memberikan pembatas sumber daya sederhana seperti MAX_QUERIES_PER_HOUR, sekali lagi ini dapat ditentukan dengan juga menggunakan klausa WITH, bersama dengan GRANT USAGE(tidak ada hak istimewa yang ditambahkan) atau GRANT ALL, Anda juga dapat menentukan GRANT USAGEdi tingkat global, tingkat database, tingkat meja, dll ....

s1los
sumber