Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySql:Nur-Lese-Optionen gewähren?

Es hängt davon ab, wie Sie "alle gelesen" definieren.

"Lesen" aus Tabellen und Views ist das SELECT Privileg. Wenn Sie das mit "alles gelesen" 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 zu berühren". Also, hier sind die anderen Arten des Lesens, die mir in den Sinn kommen:

Das "Lesen" der Definition von Views ist der SHOW VIEW Privileg.

Das "Lesen" der Liste der aktuell ausgeführten Abfragen durch andere Benutzer ist der PROCESS Privileg.

Den aktuellen Replikationsstatus "liest" der REPLICATION CLIENT Privileg.

Beachten Sie, dass je nach Art des betreffenden Benutzers einige oder alle dieser Informationen möglicherweise mehr Informationen preisgeben, als Sie preisgeben möchten.

Wenn Sie das lesen möchten, können Sie eines davon kombinieren (oder jedes andere von die verfügbaren Privilegien ) in einem einzigen GRANT Aussage.

GRANT SELECT, SHOW VIEW, PROCESS, REPLICATION CLIENT ON *.* TO ...

Es gibt jedoch kein einzelnes Privileg, das eine Teilmenge anderer Privilegien gewährt, wie es klingt, als würden Sie fragen.

Wenn Sie Dinge manuell tun und nach einer einfacheren Möglichkeit suchen, ohne sich die genaue Berechtigung merken zu müssen, die Sie normalerweise für eine bestimmte Benutzerklasse vergeben, können Sie die Anweisung nachschlagen, um die Berechtigung eines vergleichbaren Benutzers neu zu generieren, und sie ändern um einen neuen Benutzer mit ähnlichen Privilegien zu erstellen:

mysql> SHOW GRANTS FOR 'not_leet'@'localhost';
+------------------------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected]                                                                                                      |
+------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, REPLICATION CLIENT ON *.* TO 'not_leet'@'localhost' IDENTIFIED BY PASSWORD '*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' |
+------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

Das Ändern von „not_leet“ und „localhost“, damit sie mit dem neuen Benutzer übereinstimmen, den Sie hinzufügen möchten, zusammen mit dem Passwort, führt zu einem wiederverwendbaren GRANT Anweisung zum Erstellen eines neuen Benutzers.

Wenn Sie möchten, dass ein einzelner Vorgang den begrenzten Satz von Berechtigungen für Benutzer einrichtet und gewährt und möglicherweise alle unverdienten Berechtigungen entfernt, können Sie dies tun, indem Sie eine gespeicherte Prozedur erstellen, die alles kapselt, was Sie tun möchten. Innerhalb des Hauptteils der Prozedur würden Sie den GRANT erstellen Anweisung mit dynamischem SQL und/oder manipulieren direkt die Berechtigungstabellen selbst.

In dieser aktuellen Frage zu Datenbankadministratoren , wollte der Poster die Möglichkeit für einen unprivilegierten Benutzer, andere Benutzer zu modifizieren, was natürlich normalerweise nicht möglich ist -- ein Benutzer, der andere Benutzer modifizieren kann, ist per definitionem kein unprivilegierter Benutzer -- jedoch - - Gespeicherte Prozeduren stellten in diesem Fall eine gute Lösung dar, da sie mit dem Sicherheitskontext ihres DEFINER ausgeführt werden Benutzer, erlaubt jedem mit EXECUTE Privileg für das Verfahren, um vorübergehend eskalierte Privilegien anzunehmen, damit sie die spezifischen Dinge tun können, die das Verfahren bewirkt.