Ich habe einen Benutzer, dem ich alle READ-Berechtigungen für ein Datenbankschema erteilen möchte.
Eine Möglichkeit ist diese:
GRANT SELECT, SHOW_VIEW ON test.* TO 'readuser'@'%';
Gibt es eine Möglichkeit, alle Lesevorgänge in einem Grant zu gruppieren?
Wenn es ein einziges Recht gibt, das für ALLE LESE-Operationen in der Datenbank gilt.
Das hängt davon ab, wie Sie "all read." definieren;
"Lesen" von Tabellen und Views ist das SELECT
-Recht. Wenn Sie das mit "all read" meinen, dann ja:
GRANT SELECT ON *.* TO 'username'@'host_or_wildcard' IDENTIFIED BY 'password';
Es klingt jedoch so, als ob Sie die Fähigkeit meinen, alles zu "sehen", zu "sehen, aber nicht berühren"; Also, hier sind die anderen Arten des Lesens, die mir einfallen:
"Lesen" die Definition von Ansichten ist das Privileg SHOW VIEW
.
"Lesen" der Liste der aktuell ausgeführten Abfragen von anderen Benutzern ist das PROCESS
-Recht.
"Lesen" des aktuellen Replikationsstatus ist das REPLICATION CLIENT
-Privileg.
Beachten Sie, dass eine oder alle dieser Berechtigungen mehr Informationen preisgeben können, als Sie beabsichtigen, je nach der Art des betreffenden Benutzers.
Wenn Sie genau das lesen wollen, können Sie jedes dieser Privilegien (oder jedes andere der verfügbaren Privilegien) in einer einzigen "GRANT"-Anweisung kombinieren.
GRANT SELECT, SHOW VIEW, PROCESS, REPLICATION CLIENT ON *.* TO ...
Es gibt jedoch kein einzelnes Privileg, das eine Teilmenge anderer Privilegien gewährt, was sich anhört, als würden Sie danach fragen.
Wenn Sie die Dinge manuell erledigen und nach einem einfacheren Weg suchen, ohne sich an die genauen Berechtigungen erinnern zu müssen, die Sie normalerweise für eine bestimmte Benutzerklasse vergeben, können Sie die Anweisung nachschlagen, um die Berechtigungen eines vergleichbaren Benutzers neu zu generieren, und sie ändern, um einen neuen Benutzer mit ähnlichen Berechtigungen zu erstellen:
mysql> SHOW GRANTS FOR 'not_leet'@'localhost';
+------------------------------------------------------------------------------------------------------------------------------------+
| Grants for not_leet@localhost |
+------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, REPLICATION CLIENT ON *.* TO 'not_leet'@'localhost' IDENTIFIED BY PASSWORD '*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' |
+------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
Wenn Sie 'not_leet' und 'localhost' so ändern, dass sie mit dem neuen Benutzer übereinstimmen, den Sie hinzufügen möchten, ergibt sich zusammen mit dem Passwort eine wiederverwendbare GRANT
-Anweisung zum Anlegen eines neuen Benutzers.
Wenn Sie einen einzigen Vorgang benötigen, um eine begrenzte Anzahl von Privilegien für Benutzer einzurichten und zu gewähren, und vielleicht alle unverdienten Privilegien zu entfernen, können Sie eine gespeicherte Prozedur erstellen, die alles kapselt, was Sie tun möchten. Innerhalb des Prozedurenkörpers erstellen Sie die "GRANT"-Anweisung mit dynamischem SQL und/oder manipulieren direkt die Berechtigungstabellen selbst.
In dieser aktuellen Frage zu Datenbankadministratoren wollte der Poster, dass ein unprivilegierter Benutzer andere Benutzer ändern kann, was natürlich normalerweise nicht möglich ist - ein Benutzer, der andere Benutzer ändern kann, ist per Definition, Ein Benutzer, der andere Benutzer ändern kann, ist per Definition kein unprivilegierter Benutzer. Gespeicherte Prozeduren bieten in diesem Fall jedoch eine gute Lösung, da sie mit dem Sicherheitskontext ihres DEFINER
-Benutzers ausgeführt werden, so dass jeder, der das EXECUTE
-Recht für die Prozedur hat, vorübergehend erweiterte Rechte erhalten kann, um die speziellen Aufgaben der Prozedur zu erfüllen.
GRANT SELECT ON *.* TO 'user'@'localhost' IDENTIFIED BY 'password';
Dadurch wird ein Benutzer mit "SELECT"-Privileg für alle Datenbanken einschließlich der Ansichten erstellt.
Wenn Sie möchten, dass die Ansicht nur gelesen werden kann, nachdem Sie die Leseberechtigung erteilt haben, können Sie ALGORITHM = TEMPTABLE in Ihrer DDL-Definition der Ansicht verwenden.