web-dev-qa-db-fra.com

Comment sécuriser l'accès à la base de données

Je développe un site Web personnel avec beaucoup d'informations relativement sensibles (généalogiques) stockées dans une base de données MySQL. Le moteur de site est écrit en PHP. Jusqu'ici (phase du prototype), je n'ai qu'un seul compte MySQL. J'ai codé en dur le nom d'utilisateur et le mot de passe de la base de données dans PHP et mis en place l'authentification utilisateur indépendamment de l'authentification MySQL. Donc, tant que les gens accèdent à mon site Web via mon moteur PHP, il est sécurisé. Cependant, si quelqu'un parvient à obtenir le code PHP lui-même, il obtiendra un accès complet à la base de données.

Est-il possible et est-ce une bonne pratique de sécuriser davantage la base de données en créant un compte MySQL distinct pour chaque utilisateur du site et en utilisant un mot de passe utilisateur pour accéder à MySQL? Si oui, serait-il possible de stocker de manière sécurisée le nom d'utilisateur/mot de passe de la base de données entre les sessions (pour activer la fonctionnalité "Remember me")?

Je n'ai pas beaucoup d'expérience dans le développement web, c'est mon premier projet impliquant un CMS auto-programmé.

3
texnic

Non, ce n'est pas une bonne pratique de créer un utilisateur de base de données pour chaque utilisateur du site. La façon dont vous avez les choses maintenant est assez standard. Les utilisateurs ne devraient pas avoir accès aux mots de passe stockés dans votre code PHP à moins que votre serveur ne soit compromis, et c'est le pire des cas.

Le seul inconvénient est que si vous utilisez une forme de contrôle de source pour votre projet (par exemple, Git), vous ne devez pas conserver de fichiers de configuration contenant des mots de passe dans le référentiel. Ainsi, vous évitez d'exposer des mots de passe par inadvertance si vous utilisez un service tel que Github ou si vous devez autoriser d'autres personnes à accéder à votre code.

3
Tim Fountain