Warum wird ein "GRANT USAGE" erstellt, wenn ich einem Benutzer zum ersten Mal Berechtigungen erteile?

100

Ich bin neu auf der Administratorseite von DBMS und habe heute Abend eine neue Datenbank eingerichtet (mit MySQL), als ich dies bemerkte. Nachdem einem Benutzer zum ersten Mal eine Berechtigung erteilt wurde, wird eine weitere Berechtigung erstellt, die wie folgt aussieht

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

In der Dokumentation heißt es, dass das USAGEPrivileg "keine Privilegien" bedeutet. Ich schließe daraus, dass diese Berechtigungen hierarchisch funktionieren und dass ein Benutzer möglicherweise eine Art Privileg für alle Datenbanken haben muss. Dies dient also als Fang für alle?

Ich verstehe auch nicht, warum diese Zeile eine IDENTIFIED BYKlausel enthält, wenn der von mir erstellte Zuschuss keine enthält (hauptsächlich, weil ich nicht verstehe, welchem ​​Zweck die IDENTIFIED BYKlausel dient).

Bearbeiten: Entschuldigung, dass Sie dies ursprünglich nicht angegeben haben, die Zuschüsse waren

GRANT ALL PRIVILEGES ON database.* TO admin_user
GRANT SELECT, INSERT, UPDATE, DELETE ON database.* TO user
John M Naglick
quelle
Können

Antworten:

143

Wie Sie sagten, ist in MySQL USAGEgleichbedeutend mit "keine Privilegien". Aus dem MySQL-Referenzhandbuch :

Der USAGE-Berechtigungsspezifizierer steht für "keine Berechtigungen". Es wird auf globaler Ebene mit GRANT verwendet, um Kontoattribute wie Ressourcenlimits oder SSL-Merkmale zu ändern, ohne die vorhandenen Kontoberechtigungen zu beeinträchtigen.

USAGEAuf diese Weise können Sie MySQL mitteilen, dass ein Konto vorhanden ist, ohne diesem Konto echte Berechtigungen zu erteilen. Sie haben daher lediglich die Berechtigung, den MySQL-Server zu verwendenUSAGE . Es entspricht einer Zeile in der `mysql`.`user`Tabelle, für die keine Berechtigungen festgelegt wurden.

Die IDENTIFIED BYKlausel gibt an, dass für diesen Benutzer ein Kennwort festgelegt wurde. Woher wissen wir, dass ein Benutzer der ist, von dem er sagt, dass er er ist? Sie identifizieren sich, indem sie das richtige Passwort für ihr Konto senden.

Das Kennwort eines Benutzers ist eines dieser globalen Kontoattribute, das nicht an eine bestimmte Datenbank oder Tabelle gebunden ist. Es lebt auch in der `mysql`.`user`Tabelle. Wenn der Benutzer keine anderen Berechtigungen hat ON *.*, werden ihm diese gewährt USAGE ON *.*und sein Kennwort-Hash wird dort angezeigt. Dies ist oft ein Nebeneffekt einer CREATE USERAussage. Wenn ein Benutzer auf diese Weise erstellt wird, hat er zunächst keine Berechtigungen, sodass er lediglich gewährt wird USAGE.

Espresso_Boy
quelle
10
Ich denke, das liegt daran, dass sie sich authentifizieren dürfen. Wenn Sie es mit einem falschen Benutzer oder / und Passwort versuchen, können Sie sich nicht authentifizieren. Ein Benutzer mit USAGE-Berechtigung kann bestimmte SQL-Befehle wie "select 1 + 1" und "show processlist" ausführen.
Mircea Vutcovici
11

Ich habe versucht, die Bedeutung von GRANT USAGE on *.* TOund hier zu finden. Ich kann klarstellen, dass GRANT USAGE on *.* TO user IDENTIFIED BY PASSWORD passworddies gewährt wird, wenn Sie den Benutzer mit dem folgenden Befehl ( ) erstellenCREATE :

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

Wenn Sie Berechtigungen mit gewährenGRANT , werden darüber hinaus neue Berechtigungen hinzugefügt.

5YrsLaterDBA
quelle
3

Außerdem können MySQL-Passwörter, wenn sie die IDENTIFIED BYKlausel nicht verwenden , leere Werte sein. Wenn sie nicht leer sind, können sie verschlüsselt sein. Aber ja USAGEverwendet wird , um ein Konto zu ändern , indem einfache Ressource Limiter Gewährung wie MAX_QUERIES_PER_HOURwiederum kann dies durch auch mit der WITH - Klausel angegeben werden, in Verbindung mit GRANT USAGE(keine Privilegien hinzugefügt) oder GRANT ALLkönnen Sie auch angeben , GRANT USAGEauf globaler Ebene, Datenbankebene, Tabellenebene, etc ....

s1los
quelle