Ich habe einen Benutzer, dem ich die gesamte READ-Berechtigung für ein Datenbankschema erteilen möchte.
Ein Weg ist folgender:
GRANT SELECT, SHOW_VIEW ON test.* TO 'readuser'@'%';
Gibt es eine Möglichkeit, alle Lesevorgänge in Grant zu gruppieren?
SHOW VIEW
nichtSHOW_VIEW
, aber Sie müssen dies einem Benutzer nicht gewähren, es sei denn, Sie möchten, dass erSHOW CREATE VIEW
die Ansichten bearbeiten kann ... er kann aus den Ansichten mit dem einzigenSELECT
Privileg auswählen . Was meinen Sie mit "Alle Lesevorgänge in Grant gruppieren"?Antworten:
Es hängt davon ab, wie Sie "alle gelesen" definieren.
Das "Lesen" aus Tabellen und Ansichten ist das
SELECT
Privileg. Wenn Sie das mit "alles gelesen" meinen, dann ja:Es hört sich jedoch so an, als ob Sie die Fähigkeit meinen, alles zu "sehen", "zu schauen, aber nicht zu berühren". Also, hier sind die anderen Arten des Lesens, die mir in den Sinn kommen:
Das "Lesen" der Definition von Ansichten ist das
SHOW VIEW
Privileg.Das "Lesen" der Liste der aktuell ausgeführten Abfragen durch andere Benutzer ist das
PROCESS
Privileg.Das "Lesen" des aktuellen Replikationsstatus ist das
REPLICATION CLIENT
Privileg.Beachten Sie, dass einige oder alle dieser Informationen je nach Art des betreffenden Benutzers möglicherweise mehr Informationen enthalten, als Sie offenlegen möchten.
Wenn Sie dies lesen möchten, können Sie eine dieser (oder eine andere der verfügbaren) Berechtigungen in einer einzigen
GRANT
Anweisung kombinieren .Es gibt jedoch kein einzelnes Privileg, das eine Teilmenge anderer Privilegien gewährt. So hört es sich an, als würden Sie fragen.
Wenn Sie die Dinge manuell ausführen und nach einer einfacheren Möglichkeit suchen, dies zu tun, ohne sich an die genaue Gewährung erinnern zu müssen, die Sie normalerweise für eine bestimmte Benutzerklasse gewähren, können Sie die Anweisung nachschlagen, um die Bewilligungen eines vergleichbaren Benutzers neu zu generieren, und sie ändern So erstellen Sie einen neuen Benutzer mit ähnlichen Berechtigungen:
Wenn Sie 'not_leet' und 'localhost' so ändern, dass sie dem neuen Benutzer entsprechen, den Sie zusammen mit dem Kennwort hinzufügen möchten, wird eine wiederverwendbare
GRANT
Anweisung zum Erstellen eines neuen Benutzers erstellt.Wenn Sie möchten, dass ein einzelner Vorgang den begrenzten Satz von Berechtigungen einrichtet und Benutzern gewährt und möglicherweise alle nicht verdienten Berechtigungen entfernt, können Sie eine gespeicherte Prozedur erstellen, die alles enthält, was Sie tun möchten. Im Hauptteil der Prozedur würden Sie die
GRANT
Anweisung mit dynamischem SQL erstellen und / oder die Grant-Tabellen selbst direkt bearbeiten.In dieser aktuellen Frage zu Datenbankadministratoren wollte das Poster die Möglichkeit für einen nicht privilegierten Benutzer, andere Benutzer zu ändern. Dies ist natürlich normalerweise nicht möglich - ein Benutzer, der andere Benutzer ändern kann, ist dies per Definition nicht Ein nicht privilegierter Benutzer - gespeicherte Prozeduren - stellten in diesem Fall jedoch eine gute Lösung dar, da sie mit dem Sicherheitskontext seines
DEFINER
Benutzers ausgeführt werden und es jedem mitEXECUTE
Berechtigung für die Prozedur ermöglichen, vorübergehend eskalierte Berechtigungen anzunehmen, damit er die spezifischen Dinge tun kann Verfahren erreicht.quelle
Dadurch wird ein Benutzer mit
SELECT
Berechtigungen für alle Datenbanken einschließlich Ansichten erstellt.quelle
Es gibt verschiedene Berechtigungen, die Sie einem Benutzer erteilen können
Um einem bestimmten Benutzer eine Berechtigung zu erteilen, können Sie dieses Framework verwenden:
Ich fand diesen Artikel sehr hilfreich
quelle
Eine Schritt-für-Schritt-Anleitung habe ich hier gefunden .
So erstellen Sie ein schreibgeschütztes Datenbankbenutzerkonto für MySQL
Führen Sie an einer UNIX-Eingabeaufforderung das MySQL-Befehlszeilenprogramm aus und melden Sie sich als Administrator an, indem Sie den folgenden Befehl eingeben:
Geben Sie das Passwort für das Root-Konto ein. Führen Sie an der MySQL-Eingabeaufforderung einen der folgenden Schritte aus:
Geben Sie den folgenden Befehl ein, um dem Benutzer von einem beliebigen Host aus Zugriff auf die Datenbank zu gewähren:
Wenn der Collector auf demselben Host wie die Datenbank installiert wird, geben Sie den folgenden Befehl ein:
Mit diesem Befehl kann der Benutzer nur vom lokalen Host aus schreibgeschützt auf die Datenbank zugreifen. Wenn Sie den Hostnamen oder die IP-Adresse des Hosts kennen, auf dem der Collector installiert werden soll, geben Sie den folgenden Befehl ein:
Der Hostname muss durch DNS oder durch die lokale Hosts-Datei auflösbar sein. Geben Sie an der MySQL-Eingabeaufforderung den folgenden Befehl ein:
Typ
quit
.Das Folgende ist eine Liste von Beispielbefehlen und Bestätigungsmeldungen:
quelle
Sogar der Benutzer hat eine Antwort erhalten und @Michael - sqlbot hat die meisten Punkte in seinem Beitrag sehr gut behandelt, aber ein Punkt fehlt, also versuche nur, ihn zu behandeln.
Wenn Sie einem einfachen Benutzer eine Leseberechtigung erteilen möchten (keine Art von Administrator) -
Hinweis: Hier ist EXECUTE erforderlich, damit der Benutzer Daten lesen kann, wenn eine gespeicherte Prozedur vorhanden ist, die einen Bericht erstellt (mit wenigen select-Anweisungen).
Ersetzen Sie localhost durch eine bestimmte IP, von der aus der Benutzer eine Verbindung zur Datenbank herstellen wird.
Zusätzliche Leseberechtigungen sind:
quelle
Wenn die Ansicht nach Erteilung der Leseberechtigung nur gelesen werden soll, können Sie in Ihrer Ansicht die DDL-Definition ALGORITHM = TEMPTABLE verwenden.
quelle
Hinweis für MySQL 8 ist es anders
Sie müssen dies in zwei Schritten tun:
quelle