Nous avons certains serveurs de base de données MySQL configurés avec une réplication basée sur les lignes, pour des performances. Le logiciel écrit sur le maître et lit à partir du maître ou de l'esclave. Tout fonctionne très bien, pour la plupart.
Je crois comprendre que MySQL autorisera les écritures sur l'esclave, même s'il sait que c'est un esclave MySQL. Idéalement, je voudrais un peu fermer cela, donc même si quelqu'un écrit un mauvais code qui obtient une connexion en lecture et fait un UPDATE
, il générera une erreur plutôt que de mettre des données sur l'esclave.
Existe-t-il un moyen de le faire dans MySQL? Évidemment, nous aimerions rendre cela impossible à partir de notre logiciel, mais comme un pare-feu sur nos serveurs, je voudrais être aussi défensif que possible.
Merci!
Comme alternative à la configuration
read_only=1
(par exemple, lorsqu'il existe d'autres bases de données de bloc-notes / rapports / développement sur l'instance esclave), je dépouille parfois tous les privilèges autres que SELECT de tous les utilisateurs sur la base de données que je réplique.Autrement dit, après avoir exécuté la commande GRANT sur le maître, j'exécute la commande REVOKE sur l'esclave.
la source
Depuis MySQL 5.7.8 , il existe désormais une
super_read_only
option qui empêche même les utilisateurs SUPER d'effectuer des mises à jour client. Il ne perturbe pas le processus de réplication. Comme avec d'autres paramètres, il peut être défini:--super_read_only=ON
),super_read_only=1
), ouSET GLOBAL super_read_only = 1;
).Notez que:
super_read_only
active implicitementread_only
read_only
désactive implicitementsuper_read_only
Quelques mises en garde:
read_only
nisuper_read_only
empêchera sur des fichiers temporaires.super_read_only
activé ont été signalés.Référence: https://www.percona.com/blog/2016/09/27/using-the-super_read_only-system-variable/
la source
Comme le premier article le suggère, vous le faites avec des autorisations. L'option en lecture seule ne fonctionne pas pour les super utilisateurs en tant que FYI et ce n'est pas vraiment une solution réalisable pour un esclave où vous souhaitez empêcher les écritures. Vous devez empêcher les écritures avec les autorisations utilisateur / base de données / table. D'une part, l'utilisateur de réplication doit toujours être capable d'écrire sur l'esclave pour le synchroniser avec le maître. Une meilleure façon de contrôler les écritures est que vous devez révoquer les options qui autorisent les écritures (c.-à-d. Insère, crée, etc.) pour l'utilisateur en question qui devrait faire des lectures uniquement sur l'esclave.
la source
Accordez uniquement des droits de réplication aux utilisateurs sur l'esclave. Vous avez toujours le problème des droits d'utilisateur root, mais vous pouvez supprimer l'accès root distant au serveur de base de données.
la source