Perché viene creato un "GRANT USAGE" la prima volta che concedo i privilegi a un utente?


101

Sono nuovo nella parte amministrativa di DBMS e stasera stavo configurando un nuovo database (usando MySQL) quando l'ho notato. Dopo aver concesso a un utente un privilegio per la prima volta, viene creata un'altra concessione simile

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

La documentazione dice che il USAGEprivilegio significa "nessun privilegio", quindi deduco che le concessioni funzionano in modo gerarchico e forse un utente deve avere un qualche tipo di privilegio per tutti i database, quindi questo serve come un tutto?

Inoltre, non capisco perché questa riga IDENTIFIED BYcontenga una clausola quando la sovvenzione che ho creato non ne ha una (principalmente perché non capisco a cosa IDENTIFIED BYserva la clausola).

Modifica: ci scusiamo per non averlo affermato originariamente, le sovvenzioni erano

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

puoi dirci la sovvenzione che hai
ottenuto

Risposte:


144

Come hai detto, in MySQL USAGEè sinonimo di "nessun privilegio". Dal manuale di riferimento di MySQL :

L'identificatore del privilegio USAGE sta per "nessun privilegio". Viene utilizzato a livello globale con GRANT per modificare gli attributi dell'account come i limiti delle risorse o le caratteristiche SSL senza influire sui privilegi dell'account esistente.

USAGEè un modo per dire a MySQL che esiste un account senza conferire alcun privilegio reale a quell'account. Hanno semplicemente il permesso di utilizzare il server MySQL, quindi USAGE. Corrisponde a una riga nella `mysql`.`user`tabella senza privilegi impostati.

La IDENTIFIED BYclausola indica che una password è impostata per quell'utente. Come facciamo a sapere che un utente è chi dice di essere? Si identificano inviando la password corretta per il proprio account.

La password di un utente è uno di quegli attributi dell'account a livello globale che non è legato a un database o una tabella specifici. Vive anche nella `mysql`.`user`tavola. Se l'utente non dispone di altri privilegi ON *.*, gli vengono concessi USAGE ON *.*e qui viene visualizzato l'hash della password. Questo è spesso un effetto collaterale di una CREATE USERdichiarazione. Quando un utente viene creato in questo modo, inizialmente non dispone di privilegi, quindi viene semplicemente concesso USAGE.


10
Penso che sia perché sono autorizzati ad autenticarsi. Se provi con un utente o / e una password sbagliati, non puoi autenticarti. Un utente con privilegio USAGE può eseguire determinati comandi SQL come "seleziona 1 + 1" e "mostra elenco processi".
Mircea Vutcovici

11

Stavo cercando di trovare il significato GRANT USAGE on *.* TOe l' ho trovato qui. Posso chiarire che GRANT USAGE on *.* TO user IDENTIFIED BY PASSWORD passwordverrà concesso quando creerai l'utente con il seguente comando ( CREATE):

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

Quando si concede il privilegio con GRANT, verranno aggiunti nuovi privilegi.


3

Inoltre, le password mysql quando non si utilizza la IDENTIFIED BYclausola, possono essere valori vuoti, se non vuoti, possono essere crittografati. Ma sì USAGEviene utilizzato per modificare un account concedendo limitatori di risorse semplici come MAX_QUERIES_PER_HOUR, ancora una volta, questo può essere specificato anche utilizzando la clausola WITH, in combinazione con GRANT USAGE(nessun privilegio aggiunto) o GRANT ALL, è anche possibile specificare GRANT USAGEa livello globale, livello database, livello tavolo, ecc ....

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.