Bonjour,
Nous développons actuellement une application PHP qui sera située sur un serveur accessible depuis Internet.
L'application aura accès en lecture (privilège SELECT) à une base de données de référence (pays, départements, diplômes, types, niveaux...) et à la BDD utilisée pour enregistrer les données fournies par les utilisateurs connectés via Internet.
Les deux BDD seront situées sur un serveur non accessible directement depuis Internet ; seul le port réservé à la communication entre l'application et la BDD sera ouvert sur le serveur de données depuis le serveur de l'application. L'utilisateur MySQL de l'application ne sera autorisé à se connecter que depuis l'adresse IP du serveur applicatif.
Plaçons-nous dans l'hypothèse d'un pirate qui arrive à prendre le contrôle du serveur applicatif et souhaite mettre la pagaille dans les données. 
Nous souhaitons limiter au maximum ses possibilités d'action sur les BDD accessibles depuis le serveur applicatif.
La première idée est de n'accorder que des privilèges limités à l'utilisateur MySQL :
GRANT SELECT, EXECUTE ON la_bdd.* TO 'le_user'@'serveur_appli'
Après quelques tests en local, je constate que le user :
- ne peut pas faire de requête INSERT, UPDATE ou DELETE ; => OK
- peut exécuter une procédure contenant une requête INSERT ; => OK
- ne peut pas voir le code de la procédure ; => OK
- peut sélectionner dans les tables SELECT * FROM la_table donc voir les noms des colonnes ; => OK mais s'il y a un moyen d'empêcher le SELECT *, nous sommes preneurs
- peut faire un SHOW CREATE TABLE et voir la structure détaillée des tables ; => KO 
- peut lire information_schema donc voir pas mal d'infos dont, là aussi, la structure détaillée des tables ; => KO 
- peut faire un SHOW TABLES donc voir toutes les tables de la BDD alors que le code de l'application ne le dévoilera pas car appel aux procédures et utilisation de vues. => KO 
J'ai essayé d'enlever le privilège USAGE mais c'est inopérant.
Y a t-il un moyen pour ne laisser strictement que SELECT et EXECUTE à l'utilisateur et qu'il ne voie rien d'autre ?
Partager