Utilisateur de base de données MySQL: Quels privilèges sont nécessaires?

52

La courte instruction d’installation de WordPress ( "5 minutes" ) indique que:

Créez une base de données pour WordPress sur votre serveur Web, ainsi qu’un utilisateur MySQL disposant de tous les privilèges lui permettant d’y accéder et de le modifier.

Lors de la création professionnelle d'un nouveau blog, je me demandais comment cela correspond à ce que la configuration des privilèges / autorisations des utilisateurs de la base de données MySQL m'offre:

  • Données: SELECT , INSERT, UPDATE,DELETE
  • Définition: CREATE , ALTER,DROP
  • Supplémentaire: INDEX
  • Plus:
    1. LOCK TABLES
    2. REFERENCES
    3. CREATE TEMPORARY TABLES
    4. CREATE VIEW
    5. SHOW VIEW
    6. CREATE ROUTINE
    7. EXECUTE
    8. ALTER ROUTINE

Je suis assez sûr pour les trois premiers groupes, je les ai nommés Data, Definition et Extra ici. Mais qu'en est-il des autres en dessous de l' entrée Plus ? Normalement, je dirais que ce n'est pas nécessaire, mais j'aimerais avoir un deuxième avis.

hakre
la source

Réponses:

13

Les autres ne sont pas nécessaires comme vous le soulignez.

Btw, ce que vous pourriez faire est, définir conditionnellement l'utilisateur / passe en fonction de la page demandée. Comme dans non privilégié avec select / insert / update / delete pour une utilisation normale, et privilégié avec les éléments liés à la définition / index en plus lors de la visite de la page de mise à niveau.

Denis de Bernardy
la source
1
Existe-t-il une référence sur la manière de définir conditionnellement l'utilisateur / le passe en fonction de la page demandée dans un environnement WordPress? TA
superjos
@superjos: Non, pas à ma connaissance, mais l'essentiel est de définir le type d'utilisateur de base de données à sélectionner / insérer / mettre à jour / supprimer dans wp-config et, lorsque l'url correspond au / Pages wp-admin (mise à niveau probable, activer le thème et activer le plugin), pour définir un autre utilisateur pouvant faire tout le reste.
Denis de Bernardy
34

"Tous les privilèges" signifie généralement que vous devez tout attribuer à l'utilisateur. Toutefois ...

J'ai trouvé au moins un article qui prétend que l'utilisateur de MySQL n'a besoin que de:

  • SÉLECTIONNER
  • INSÉRER
  • MISE À JOUR

En fouillant plus profondément , j'ai constaté que pour fonctionner pleinement (mises à jour automatisées, installation / désinstallation de plug-ins, etc.), WordPress nécessite des autorisations supplémentaires:

  • EFFACER
  • ALTER (pour les mises à jour)
  • CREER LA TABLE
  • DROP TABLE

Aussi, non référencé mais cela a du sens:

  • INDICE

Mais ce sont les deux seules références solides que je puisse trouver qui soient étayées par des opinions postées ailleurs. Je vous encourage quand même à vous en tenir à GRANT ALL, mais si vous devez absolument limiter votre utilisation de base de données, commencez avec ces 7 privilèges et testez-le à fond pour vous assurer que tout fonctionne comme prévu.

EAMann
la source
Merci d'avoir partagé vos avis. Pour ce site installé, je n’ai PAS TOUT SUBVENTION car il ne s’agit pas d’un site de développement, mais plutôt de tous les membres. INDICE. Jusque là, ça a l'air bien, je pense que je le garderai au fil des jours, c'est un site réel, incl. beaucoup d'utilisation de plugin et autres. Pour INDEX, je pourrais aussi un peu chercher dans core et dans le manuel mysql.
hakre
1
Rappelez-vous simplement que les plug-ins tiers peuvent appeler à peu près n'importe quelle instruction SQL de leur choix ... alors assurez-vous de les vérifier correctement avant d'installer des éléments qui dépendent des privilèges que vous avez révoqués.
EAMann
12

Voici ce que le Codex a à dire sur la restriction des privilèges des utilisateurs de bases de données:

Pour les opérations WordPress normales, telles que la publication de billets de blog, le téléchargement de fichiers multimédias, la publication de commentaires, la création de nouveaux utilisateurs WordPress et l'installation de plugins WordPress, l'utilisateur de la base de données MySQL n'a besoin que des privilèges de lecture et d'écriture des données pour la base de données MySQL; SELECT, INSERT, UPDATE et DELETE.

Par conséquent, toute autre structure et privilèges d’administration de base de données, tels que DROP, ALTER et GRANT, peuvent être révoqués. En révoquant ces privilèges, vous améliorez également les politiques de confinement.

Remarque: Certains plugins, thèmes et mises à jour majeures de WordPress peuvent nécessiter des modifications structurelles de la base de données, telles que l'ajout de nouvelles tables ou la modification du schéma. Dans ce cas, avant d'installer le plug-in ou de mettre à jour un logiciel, accordez temporairement à l'utilisateur de la base de données les privilèges requis.

http://codex.wordpress.org/Hardening_WordPress

rougeurs
la source
2
J'essaie de pratiquer le principe du moindre privilège lorsque cela est possible. Les informations (utiles) citées ne figurent plus dans l'article lié du Codex. Merci de l'avoir copiée ici.
Anthony G - justice pour Monica
2

En ce qui concerne la "note" dans le message de redburn, le codpress Wordpress contient également un avertissement à lire également concernant les mises à jour et les modifications du schéma de la base de données ...

(Edit: Je remarque cependant que JE NE VOIS PAS "GRANT" dans la liste des privilèges lors de la création ou de la mise à jour d'un utilisateur. Peut-être que "CREATE" devrait être ajouté à la liste? Quelqu'un a-t-il des informations à ce sujet? - à l'aide de Hostgator cPanel Mars 2016 -)

AVERTISSEMENT:
Tentative de mise à jour sans disposer de ces privilèges [ SELECT, INSERT, UPDATE, DELETE, DROP, ALTER et GRANT] peut causer des problèmes lorsque des modifications de schéma de base de données se produisent. Ainsi, il n'est PAS recommandé de révoquer ces privilèges. Si vous sentez le besoin de le faire pour des raisons de sécurité, assurez-vous d’abord d’avoir mis en place un plan de sauvegarde solide. Les sauvegardes régulières de la base de données que vous avez testées sont valides et faciles à restaurer. Une mise à niveau de la base de données ayant échoué peut généralement être résolue en restaurant la base de données à une ancienne version, en accordant les autorisations appropriées, puis en laissant WordPress tenter à nouveau de mettre à jour la base de données. La restauration de la base de données la ramènera à cette ancienne version. Les écrans d’administration de WordPress détecteront alors l’ancienne version et vous permettront d’exécuter les commandes SQL nécessaires. La plupart des mises à niveau de WordPress ne modifient pas le schéma, mais certaines le font. Seules les améliorations majeures (3.7 à 3.8, par exemple) modifiera le schéma. Les mises à niveau mineures (3.8 à 3.8.1) ne le seront généralement pas. Néanmoins, gardez une sauvegarde régulière.

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

Jerry9
la source
0

Mon opinion est identique à celle de @EAMann ci-dessus, ainsi que des sources auxquelles il a fait référence: GRANT ALL est nécessaire pour garantir la fonctionnalité et la pérennité de votre site. Même sur un site de production, vous devrez vous en tenir au manuel d'utilisation.

En tant que contributeur de code pour le noyau WordPress et quelques plug-ins, je vous recommande de conserver les privilèges de base de données par défaut, comme indiqué dans le manuel d'utilisation (DONNER TOUT PRIVILÈGES SUR wpdatabasename. * TO "wordpressusername" @ "hostname").

Le code source WordPress (présent et futur) suppose que l'utilisateur de base de données WordPress dispose de tous les privilèges de base de données pour la base de données WordPress donnée. Si votre configuration manque de privilèges de base de données, vous pouvez rencontrer des problèmes lors de la mise à niveau de WordPress et de l'ajout de plug-ins.

Donc, vous ne devriez vraiment pas utiliser des privilèges de base de données différents des privilèges de base de données recommandés par défaut dans le manuel, à moins que vous ne sachiez ce que vous faites, avez des besoins très spécifiques et n'oubliez pas vos privilèges de base de données personnalisés.

La page du Codex a depuis été mise à jour et explique comment faire cela avec des exemples sur divers systèmes et des captures d'écran. https://codex.wordpress.org/Installing_WordPress#Step_2:_Create_the_Database_and_a_User

Création d'un nom de base de données et d'un utilisateur (via PHPMyAdmin): https://codex.wordpress.org/Installing_WordPress#Using_phpMyAdmin

Création d'un nom et d'un utilisateur de base de données (via le client de ligne de commande MySQL): 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
la source