Mysql
 sql >> Base de données >  >> RDS >> Mysql

Fournir aux utilisateurs de MySQL uniquement les privilèges minimaux

Je ne suis pas d'accord avec Bill ici et la ligne de pensée d'Atomix est plus appropriée. Sauf preuve du contraire, la réponse de Bill augmente fortement le risque de compromission de la base de données.

Peut-être que pour les développeurs très expérimentés, il existe une autre sécurité en place, mais pour d'autres développeurs, donner à un script un accès complet et sans entrave pour faire ~n'importe quoi~ à une base de données pose des problèmes, alors que ce n'est pas nécessaire.

Le principe du moindre privilège devrait être utilisé ici. Pour MySQL, disposez d'un super utilisateur avec tous les privilèges utilisés pour créer des tables, supprimer une base de données, etc. Idéalement, ce nom d'utilisateur et ce mot de passe ne sont jamais vus dans aucun fichier PHP ni aucun fichier sur le serveur Web. (J'utilise PHP comme exemple, mais cela s'applique à d'autres applications Web). Vous n'utiliserez ce nom d'utilisateur et ce mot de passe qu'avec quelque chose comme PHPMyAdmin ou MySQL Workbench.

Ensuite, pour les scripts PHP, ayez-en un avec le minimum requis, comme juste INSERT, SELECT, UPDATE, peut-être même pas DELETE, selon votre script PHP. Ce serait dans les fichiers PHP, c'est-à-dire en fait UN SEUL fichier EN DEHORS de la racine du document, comme cela est recommandé par la plupart.

La raison est la suivante :oui, vous n'avez pas besoin d'un utilisateur MySQL pour chaque utilisateur d'application Web. Mais principe du moindre privilège (http://en.wikipedia.org/wiki/Principle_of_least_privilege ) devrait s'appliquer. Si, d'une manière ou d'une autre, votre super utilisateur MySQL est compromis parce que vous avez accidentellement nommé votre script de connexion MySQL en .txt au lieu de .php, ou si quelqu'un a eu accès aux fichiers du serveur Web, au moins le "pire" qu'il puisse faire est SELECT, UPDATE et INSERT. .. Ce qui, bien que pouvant causer de gros problèmes de toute façon, n'est pas aussi grave que de leur donner DROP DATABASE, DROP TABLES et des choses bien pires.

De plus, dans mon projet actuel en raison de pratiques de développement agiles (je ne travaille pas pour mais je recommande http://www.agilealliance .org/ ), un ou deux membres de l'équipe "non technique" utilisent directement PHPMyAdmin pour apporter des modifications directes à la base de données MySQL. En effet, il n'est pas nécessaire de créer un CMS pour une saisie directe simple des données. Dans ce cas, un troisième utilisateur MySQL avec des privilèges raisonnables mais "juste assez" leur convient. Nous ne voulons pas paralyser le membre de l'équipe avec trop peu de privilèges, mais bien sûr, il ne devrait pas être en mesure de supprimer ou de modifier accidentellement des éléments.

Étant donné que MySQL n'a pas de RÔLES (au moment où la question d'origine a été posée et selon Bill), il est très risqué d'autoriser n'importe quel script Web à accéder à MySQL avec un seul super utilisateur.