De ce este creat un „GRANT USAGE” prima dată când acord privilegii unui utilizator? (Programare, Mysql, Bază De Date, Privilegii, Grant)

John M Naglick a intrebat.

Sunt nou în partea de administrare a SGBD-urilor și configuram o nouă bază de date în această seară (folosind MySQL) când am observat acest lucru. După ce am acordat un utilizator un privilegiu pentru prima dată, se creează un alt grant care arată astfel

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

În documentație se spune că USAGE înseamnă „fără privilegii”, așa că deduc că granturile funcționează ierarhic și poate că un utilizator trebuie să aibă un anumit tip de privilegiu pentru toate bazele de date, astfel încât acesta servește ca un „catch all”?

De asemenea, nu înțeleg de ce această linie are un IDENTIFIED BY când grantul pe care l-am creat nu are o clauză (mai ales pentru că nu înțeleg care este scopul clauzei IDENTIFIED BY clauza servește).

Editați: Îmi pare rău că nu am precizat acest lucru inițial, granturile au fost

GRANT ALL PRIVILEGES ON database.* TO admin_user
GRANT SELECT, INSERT, UPDATE, DELETE ON database.* TO user

Comentarii

  • puteți să ne spuneți grantul pe care l-ați executat –  > Por Pentium10.
3 răspunsuri
Espresso_Boy

După cum ați spus, în MySQL USAGE este sinonim cu „fără privilegii”. De la Manualul de referință MySQL:

Specificatorul de privilegii USAGE este sinonim cu „fără privilegii”. Este utilizat la nivel global cu GRANT pentru a modifica atributele contului, cum ar fi limitele de resurse sau caracteristicile SSL, fără a afecta privilegiile existente ale contului.

USAGE este o modalitate de a indica MySQL că un cont există fără a conferi niciun privilegiu real acelui cont. Acesta are doar permisiunea de a să utilizeze serverul MySQL, prin urmare USAGE. Acesta corespunde unui rând din fișierul `mysql`.`user` fără privilegii stabilite.

Adresa IDENTIFIED BY indică faptul că o parolă este stabilită pentru utilizatorul respectiv. De unde știm că un utilizator este cine spune că este? Ei identifică prin trimiterea parolei corecte pentru contul lor.

Parola unui utilizator este unul dintre acele atribute de cont la nivel global care nu este legat de o anumită bază de date sau tabel. De asemenea, acesta se află în `mysql`.`user` tabel. În cazul în care utilizatorul nu are alte privilegii ON *.*, , i se acordă USAGE ON *.* și hash-ul parolei lor este afișat acolo. Acesta este adesea un efect secundar al unui CREATE USER declarație. Atunci când un utilizator este creat în acest mod, inițial nu are privilegii, astfel încât i se acordă doar USAGE.

Comentarii

  • Cred că acest lucru se datorează faptului că li se permite să se autentifice. Dacă încercați cu un utilizator sau/și o parolă greșită, nu vă puteți autentifica. Un utilizator cu privilegii USAGE poate executa anumite comenzi SQL, cum ar fi „select 1+1” și „show processlist”. –  > Por Mircea Vutcovici.
5YrsLaterDBA

Încercam să aflu semnificația lui GRANT USAGE on *.* TO și am găsit aici. Pot să clarific că GRANT USAGE on *.* TO user IDENTIFIED BY PASSWORD password va fi acordat atunci când creați utilizatorul cu următoarea comandă (CREATE):

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

Atunci când acordați privilegiu cu GRANT, , se vor adăuga noi privilegii pe lângă acesta.

Comentarii

  • Ce înseamnă „pe deasupra”? –  > Por Čamo.
s1los

În plus, parolele mysql atunci când nu se utilizează IDENTIFIED BY clause, pot fi valori goale, iar dacă nu sunt goale, pot fi criptate. Dar da USAGE este utilizat pentru a modifica un cont prin acordarea unor limitări simple de resurse, cum ar fi MAX_QUERIES_PER_HOUR, Din nou, acest lucru poate fi specificat și prin utilizarea clauzei WITH, împreună cu GRANT USAGE(nu se adaugă privilegii) sau GRANT ALL, , se poate specifica și GRANT USAGE la nivel global, la nivel de bază de date, la nivel de tabel, etc….