Mamy kilka serwerów baz danych MySQL skonfigurowanych do replikacji opartej na wierszach w celu zwiększenia wydajności. Oprogramowanie zapisuje do urządzenia nadrzędnego i odczytuje dane z urządzenia nadrzędnego lub podrzędnego. W większości wszystko działa świetnie.
Rozumiem, że MySQL pozwoli na zapis do slave, nawet jeśli wie, że to slave MySQL. Idealnie chciałbym to zamknąć, więc nawet jeśli ktoś napisze zły kod, który uzyskuje połączenie do odczytu i wykonuje UPDATE
, spowoduje to zgłoszenie błędu zamiast umieszczania danych w urządzeniu podrzędnym.
Czy istnieje sposób, aby to zrobić w MySQL? Oczywiście chcielibyśmy również uniemożliwić to naszemu oprogramowaniu, ale jak zapora ogniowa na naszych serwerach, chciałbym być jak najbardziej defensywny.
Dzięki!
Jako alternatywę dla ustawienia
read_only=1
(np. Gdy istnieją inne bazy danych scratchpad / raportowania / programowania w instancji slave), czasami odbieram wszystkie uprawnienia inne niż WYBÓR wszystkim użytkownikom do bazy danych, którą replikuję.Oznacza to, że po uruchomieniu polecenia GRANT na urządzeniu nadrzędnym uruchamiam polecenie REVOKE na urządzeniu slave.
źródło
Począwszy od MySQL 5.7.8 , dostępna jest teraz
super_read_only
opcja, która uniemożliwia nawet użytkownikom SUPER wykonywanie aktualizacji klienta. Nie zakłóca to procesu replikacji. Podobnie jak w przypadku innych ustawień, można ustawić:--super_read_only=ON
),super_read_only=1
) lubSET GLOBAL super_read_only = 1;
).Uwaga:
super_read_only
niejawnie włączaread_only
read_only
domyślnie wyłączasuper_read_only
Niektóre zastrzeżenia:
read_only
niesuper_read_only
zapobiegnie operacjom na tabelach tymczasowych.super_read_only
Zgłoszono błędy niektórych zapytań z włączoną funkcją.Odniesienie: https://www.percona.com/blog/2016/09/27/using-the-super_read_only-system-variable/
źródło
Jak sugeruje pierwszy post, robisz to z uprawnieniami. Opcja tylko do odczytu nie działa dla superużytkowników jako FYI, a także nie jest tak naprawdę wykonalnym rozwiązaniem dla urządzenia podrzędnego, w którym chcesz zapobiec zapisywaniu. Musisz zapobiegać zapisom z uprawnieniami użytkownika / bazy danych / tabeli. Po pierwsze, użytkownik replikacji nadal musi mieć możliwość zapisu do urządzenia podrzędnego, aby zsynchronizować go z urządzeniem głównym. Lepszym sposobem na kontrolowanie zapisu jest odwołanie opcji, które pozwalają na zapis (tj. Wstawia, tworzy itp.) Dla danego użytkownika, który powinien wykonywać odczyty tylko na urządzeniu slave.
źródło
Przyznaj prawa związane z replikacją tylko użytkownikom slave. Nadal masz problem z prawami użytkownika root, ale możesz usunąć zdalny dostęp użytkownika root do serwera DB.
źródło