Cette page est une documentation originale PmaControl. Elle reprend une structure d'index pratique pour travailler sur l'optimisation MySQL, sans copier de contenu tiers ni dépendre d'un produit externe.
Objectif
Les security checks MySQL réduisent la surface d'attaque: comptes trop puissants, connexions non chiffrées, mots de passe faibles, privilèges globaux inutiles et exposition réseau.
Contrôles prioritaires
- Comptes anonymes ou comptes sans mot de passe.
- Utilisateurs avec
SUPER,FILE,PROCESS,GRANT OPTIONou droits globaux injustifiés. - Accès
%quand un hôte précis suffit. - TLS non imposé pour les flux sensibles.
local_infileactivé sans besoin.- Binlogs et backups lisibles par des comptes système trop larges.
SQL de base
SELECT user, host, account_locked, password_expired
FROM mysql.user
ORDER BY user, host;
SHOW GRANTS FOR 'app_user'@'%';
A retenir
Le principe est simple: chaque privilège doit avoir un propriétaire, une justification et une durée de vie.
Définir le périmètre et collecter les comptes
Inventoriez serveurs, proxies, comptes applicatifs, administrateurs, réplicas et outils de sauvegarde. Associez chaque compte à un responsable et à son hôte source prévu. Les colonnes de comptes ci-dessous concernent MySQL ; MariaDB stocke ces informations différemment selon sa version. Utilisez un compte d’audit dûment autorisé et n’exportez ni empreintes de mots de passe ni secrets dans les rapports.
SELECT VERSION() AS server_version,
CURRENT_USER() AS matched_account, USER() AS connection_identity;
SELECT user, host, plugin, account_locked, password_expired, ssl_type
FROM mysql.user
ORDER BY user, host;
SELECT grantee, privilege_type, is_grantable
FROM information_schema.user_privileges
ORDER BY grantee, privilege_type;
CURRENT_USER() identifie le compte utilisé pour les privilèges ; USER() décrit l’identité de connexion. L’inventaire global ne suffit pas : examinez SHOW GRANTS pour privilèges de base/table, privilèges dynamiques et rôles attribués, y compris rôles par défaut/actifs. Une chaîne d’authentification vide ne prouve pas un compte non sécurisé, car les plugins diffèrent. Vérifiez plugin, restriction d’hôte, verrouillage et politique réelle.
Vérifier le transport de la connexion réelle
SHOW GLOBAL VARIABLES WHERE Variable_name IN (
'require_secure_transport', 'tls_version', 'local_infile',
'secure_file_priv', 'bind_address', 'port'
);
SHOW SESSION STATUS WHERE Variable_name IN ('Ssl_cipher', 'Ssl_version');
Les champs TLS de session décrivent cette connexion seulement. Un socket Unix peut être un transport local sécurisé valide sans cipher TLS. En TCP, vérifiez chiffrement et validation du certificat/nom d’hôte dans le pilote applicatif. Si le proxy termine TLS, testez chaque segment : client-proxy et proxy-serveur. Accepter TLS côté serveur ne signifie pas que tous les clients l’imposent.
mysql --host=db.example --user=app_reader --password \
--ssl-mode=VERIFY_IDENTITY --ssl-ca=/path/to/ca.pem
Cet exemple de client MySQL demande le mot de passe et vérifie l’identité ; remplacez hôte et chemin CA. Pour un autre client, vérifiez ses options propres. Planifiez la rotation des certificats et testez de nouvelles connexions applicatives avant d’imposer la politique, afin que des sessions existantes ne masquent pas un échec à la reconnexion.
Examiner l’exposition au-delà des privilèges SQL
| Contrôle | Preuve à conserver |
|---|---|
| Accès réseau | Écoute, pare-feu et accès depuis les sources prévues |
| Fichiers et sauvegardes | Permissions, chiffrement, garde des clefs et accès restauration |
| Audit et secrets | Journaux protégés, rétention, rotation des secrets et retrait des comptes obsolètes |
Appliquez le moindre privilège par fonction : séparez trafic applicatif, migrations, supervision et sauvegarde. Testez retraits de droits et restrictions d’hôte avec de nouvelles connexions, conservez les grants initiaux pour revenir en arrière et surveillez les refus. Mettez à jour serveur et connecteurs par une procédure documentée ; les plugins d’authentification dépendent des versions. Chaque constat doit avoir responsable, échéance de correction et résultat vérifié.
Poursuivre le diagnostic
- Intégrez les constats à l’évaluation et vérifiez l’exploitation avec les contrôles de santé.