MySQL-Datenbankbenutzer: Welche Berechtigungen werden benötigt?

52

Die kurze Installationsanleitung für WordPress ( "5 Minuten" ) besagt, dass:

Erstellen Sie eine Datenbank für WordPress auf Ihrem Webserver sowie einen MySQL-Benutzer, der über alle Zugriffsrechte und Änderungsrechte verfügt.

Bei der professionellen Einrichtung eines neuen Blogs habe ich mich gefragt, wie das der Konfiguration der MySQL-Datenbankbenutzerrechte / -berechtigungen entspricht:

  • Daten: SELECT , INSERT, UPDATE,DELETE
  • Definition: CREATE , ALTER,DROP
  • Extra: INDEX
  • Mehr:
    1. LOCK TABLES
    2. REFERENCES
    3. CREATE TEMPORARY TABLES
    4. CREATE VIEW
    5. SHOW VIEW
    6. CREATE ROUTINE
    7. EXECUTE
    8. ALTER ROUTINE

Ich bin mir ziemlich sicher für die ersten drei Gruppen, ich habe sie hier Data, Definition und Extra genannt. Aber was ist mit den anderen unter dem Eintrag Mehr ? Normalerweise würde ich sagen, dass diese nicht benötigt werden, aber ich würde gerne eine zweite Meinung einholen.

hakre
quelle

Antworten:

13

Die anderen werden nicht benötigt, wie Sie betonen.

Übrigens können Sie den Benutzer / Pass basierend auf der angeforderten Seite unter bestimmten Bedingungen festlegen. Als nicht privilegiert mit select / insert / update / delete für den normalen Gebrauch und privilegiert mit Definition / Index-bezogenen Sachen zusätzlich beim Besuch der Upgrade-Seite.

Denis de Bernardy
quelle
1
Gibt es einen Hinweis, wie der Benutzer / Pass basierend auf der angeforderten Seite in einer WordPress-Umgebung bedingt festgelegt werden kann? TA
Superjos
@superjos: Nicht, dass es mir auf den ersten Blick bewusst wäre, aber das Wesentliche wäre, den normalen DB-Benutzer in wp-config auszuwählen / einzufügen / zu aktualisieren / zu löschen und, wenn die URL mit der relevanten / übereinstimmt. wp-admin-Seiten (wahrscheinlich Upgrade, Theme aktivieren und Plugin aktivieren), um einen alternativen Benutzer zu definieren, der alles andere kann.
Denis de Bernardy
34

"Alle Rechte" bedeutet normalerweise, dass Sie dem Benutzer alles überlassen sollten. Jedoch ...

Ich habe mindestens einen Artikel gefunden , in dem behauptet wird, dass der MySQL-Benutzer nur Folgendes benötigt:

  • WÄHLEN
  • EINFÜGEN
  • AKTUALISIEREN

Bei näherer Betrachtung stellte ich fest, dass WordPress einige zusätzliche Berechtigungen benötigt, um vollständig zu funktionieren (automatisierte Updates, Plug-in-Installation / -Deinstallation usw.):

  • LÖSCHEN
  • ALTER (für Updates)
  • TABELLE ERSTELLEN
  • TROPFENTABELLE

Auch nicht referenziert, aber es macht Sinn:

  • INDEX

Aber das sind die einzigen zwei soliden Referenzen, die ich finden kann und die von Meinungen gestützt werden, die an anderer Stelle veröffentlicht wurden. Ich würde Sie weiterhin ermutigen, sich an GRANT ALL zu halten, aber wenn Sie Ihre DB-Nutzung unbedingt einschränken müssen , beginnen Sie mit diesen 7 Berechtigungen und testen Sie alles, um sicherzustellen, dass die Dinge wie erwartet funktionieren.

EAMann
quelle
Vielen Dank für Ihre Meinung. Für diese Site habe ich nicht ALLES GEWÄHRT, da es sich nicht um eine Entwicklungssite handelt. INDEX. Sieht soweit gut aus, ich denke, ich halte es in den nächsten Tagen nachverfolgt, es ist eine reale Website inkl. viele Plugins und ähnliches. Für INDEX könnte ich Core und das MySQL-Handbuch auch ein bisschen durchsuchen.
Hakre
1
Denken Sie daran, dass Plug-Ins von Drittanbietern so gut wie jede gewünschte SQL-Anweisung aufrufen können. Stellen Sie daher sicher, dass Sie sie ordnungsgemäß überprüfen, bevor Sie Dinge installieren, die von den von Ihnen widerrufenen Berechtigungen abhängen.
EAMann
12

Das sagt Codex zur Einschränkung von Datenbankbenutzerrechten:

Für normale WordPress-Vorgänge, wie das Posten von Blogposts, das Hochladen von Mediendateien, das Posten von Kommentaren, das Erstellen neuer WordPress-Benutzer und das Installieren von WordPress-Plugins, benötigt der MySQL-Datenbankbenutzer nur Datenlese- und Datenschreibrechte für die MySQL-Datenbank. SELECT, INSERT, UPDATE und DELETE.

Daher können alle anderen Datenbankstruktur- und Administrationsrechte wie DROP, ALTER und GRANT widerrufen werden. Durch das Widerrufen solcher Berechtigungen verbessern Sie auch die Einschließungsrichtlinien.

Hinweis: Einige Plugins, Themes und wichtige WordPress-Updates erfordern möglicherweise strukturelle Änderungen an der Datenbank, z. B. das Hinzufügen neuer Tabellen oder das Ändern des Schemas. Erteilen Sie in diesem Fall dem Datenbankbenutzer vor der Installation des Plugins oder dem Aktualisieren einer Software vorübergehend die erforderlichen Berechtigungen.

http://codex.wordpress.org/Hardening_WordPress

Redburn
quelle
2
Ich versuche, das Prinzip des geringsten Privilegs zu praktizieren, wann immer dies möglich ist. Die (nützlichen) zitierten Informationen sind nicht mehr im verlinkten Codex-Artikel enthalten. Vielen Dank, dass Sie sie hier kopiert haben.
Anthony G - Gerechtigkeit für Monica
2

In Bezug auf den "Hinweis" in Redburns Beitrag enthält der Wordpress-Codex auch eine Warnung, die Sie auch über Updates und Änderungen des Datenbankschemas lesen sollten ...

(Bearbeiten: Ich bemerke jedoch, dass ich beim Erstellen oder Aktualisieren eines Benutzers NICHT mehr "GRANT" in der Liste der Berechtigungen sehe . Vielleicht sollte "CREATE" zur Liste hinzugefügt werden? Hat jemand Informationen dazu? - mit Hostgator cPanel , März 2016 -)

WARNUNG:
Aktualisierungsversuche ohne diese Berechtigungen [ SELECT, INSERT, UPDATE, DELETE, DROP, ALTER und GRANT] kann Probleme verursachen, wenn Änderungen am Datenbankschema auftreten. Es wird daher NICHT empfohlen, diese Berechtigungen zu widerrufen. Wenn Sie dies aus Sicherheitsgründen tun müssen, stellen Sie bitte sicher, dass Sie zuerst einen soliden Sicherungsplan eingerichtet haben, mit regelmäßigen vollständigen Datenbanksicherungen, die Sie getestet haben und die problemlos wiederhergestellt werden können. Ein fehlgeschlagenes Datenbank-Upgrade kann in der Regel behoben werden, indem die Datenbank auf eine alte Version zurückgesetzt wird, die entsprechenden Berechtigungen erteilt werden und WordPress erneut versucht, die Datenbank zu aktualisieren. Durch das Wiederherstellen der Datenbank wird die alte Version wiederhergestellt. Auf den WordPress-Verwaltungsbildschirmen wird dann die alte Version erkannt, und Sie können die erforderlichen SQL-Befehle ausführen. Die meisten WordPress-Upgrades ändern das Schema nicht, einige jedoch. Nur größere Punkt-Upgrades (3.7 auf 3.8, zum Beispiel) wird das Schema ändern. Kleinere Upgrades (3.8 auf 3.8.1) sind in der Regel nicht möglich. Führen Sie trotzdem ein regelmäßiges Backup durch.

Codex: http://codex.wordpress.org/Hardening_WordPress

Jerry9
quelle
0

Meine Meinung ist die gleiche wie bei @EAMann und die Quellen, auf die er verwiesen hat: GRANT ALL ist notwendig, um sicherzustellen, dass Ihre Site funktionsfähig und zukunftssicher ist. Selbst auf einer Produktionsstätte sollten Sie versuchen, sich an die Bedienungsanleitung zu halten.

Als jemand, der Code zum WordPress-Core und zu einigen Plug-ins beiträgt, empfehle ich, die im Benutzerhandbuch empfohlenen Standard-DB-Berechtigungen beizubehalten (GRANT ALL PRIVILEGES ON wpdatabasename. * TO "wordpressusername" @ "hostname").

Der WordPress-Quellcode (gegenwärtig und zukünftig) setzt voraus, dass der WordPress-DB-Benutzer alle DB-Berechtigungen für die angegebene WordPress-Datenbank besitzt. Wenn Ihr Setup keine DB-Berechtigungen hat, können Probleme auftreten, wenn Sie WordPress aktualisieren und weitere Plug-Ins hinzufügen.

Sie sollten also keine anderen DB-Berechtigungen als die im Handbuch empfohlenen Standard-DB-Berechtigungen verwenden, es sei denn, Sie wissen, was Sie tun, haben sehr spezielle Anforderungen und vergessen nicht, dass Sie benutzerdefinierte DB-Berechtigungen haben.

Die Codex-Seite wurde seitdem mit Beispielen auf verschiedenen Systemen und Screenshots aktualisiert. https://codex.wordpress.org/Installing_WordPress#Step_2:_Create_the_Database_and_a_User

Erstellen eines Datenbanknamens und eines Benutzers (über PHPMyAdmin): https://codex.wordpress.org/Installing_WordPress#Using_phpMyAdmin

Erstellen eines Datenbanknamens und eines Benutzers (über den MySQL-Befehlszeilenclient): https://codex.wordpress.org/Installing_WordPress#Using_the_MySQL_Client

mysql> CREATE DATABASE wpdatabasename;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON wpdatabasename.* TO "wordpressusername"@"hostname"
    -> IDENTIFIED BY "password";
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql> EXIT
Steven Lin
quelle