Korzystanie z log_bin_trust_function_creators w MySQL

14

Jakie jest zastosowanie log_bin_trust_function_creators? Ponadto, czy wartość parametru jest dynamiczna? Czy to się zmieni, jeśli ponownie uruchomię usługę MySQL?

tesla747
źródło

Odpowiedzi:

14

Ta zmienna kontroluje, czy rejestrowanie binarne powinno ufać twórcom funkcji przechowywanych, że nie będą tworzyć funkcji przechowywanych, które spowodują niebezpieczne zdarzenia. Na przykład. posiadające funkcje UUID.

Zostało to dobrze wyjaśnione w dokumentacji:

Podczas tworzenia funkcji składowanej należy zadeklarować, że jest ona deterministyczna lub nie modyfikuje danych. W przeciwnym razie odzyskiwanie lub replikacja danych może być niebezpieczne.

Domyślnie, aby zaakceptować instrukcję CREATE FUNCTION, co najmniej jedno z DETERMINISTIC, NO SQL lub READS SQL DATA musi być wyraźnie określone. W przeciwnym razie wystąpi błąd:

ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

Aby złagodzić powyższe warunki tworzenia funkcji (że musisz mieć uprawnienie SUPER i że funkcja musi być zadeklarowana jako deterministyczna lub aby nie modyfikować danych), ustaw globalną zmienną systemową log_bin_trust_function_creators na 1.

Odwołanie: dokumentacja mysql (przeczytaj to, jak to wyjaśnia na przykładzie).

O drugie pytanie, czy jest dynamiczne i czy zmieni się po ponownym uruchomieniu serwera:

  • Tak, jest to zmienna dynamiczna.

  • Zmienna zmieni się po ponownym uruchomieniu, jeśli nie zaktualizujesz konfiguracji, aby odzwierciedlić zmianę.

Odniesienie: mysql-dokumentacja-znowu

mysql_user
źródło
czy to ma wartość logiczną? Prawda, dla mnie jest ustawiona na PRAWDA. Czy to znaczy, że to „1”?
tesla747,
mysql> select if(1 is true,'TRUE','FALSE')\G *************************** 1. row *************************** if(1 is true,'TRUE','FALSE'): TRUE
mysql_user
Ok, rozumiem to. Ale czy należy zmienić to ustawienie na „1”, szczególnie w przypadku tego parametru? Teraz, odkąd ustawiłem go na PRAWDA, po ponownym uruchomieniu usługi mysql zmieni się ponownie
tesla747,
1
Zgadza się! Aby więc było trwałe, należy również umieścić tę samą wartość konfiguracyjną w pliku my.cnf.
mysql_user
1
@ tesla747 tak ... ma zastosowanie, gdy włączone jest rejestrowanie binarne.
mysql_user