Почему привилегии SUPER отключены, когда включена опция двоичного ведения журнала? - PullRequest
1 голос
/ 31 мая 2019

В Интернете есть много рекомендаций о том, как включить привилегии SUPER в случае, если кто-то обнаружит следующую ошибку:

"ОШИБКА 1419 (HY000): у вас нет привилегии SUPER, а бинарное ведение журнала включено"

Но я не смог найти, ПОЧЕМУ MySQL отключает эти привилегии, когда включена опция двоичного ведения журнала.

Есть ли проблемы с репликацией, если я использую, например, триггеры, которые модифицируют БД или что-то еще? Безопасно ли и, если нет, какие проблемы и при каких обстоятельствах я могу решить, если я верну привилегии SUPER обратно? Я думаю, что должно быть какое-то обоснование этого ограничения, но я не понимаю, какое именно.

У кого-нибудь есть ответ на этот вопрос?

Спасибо.

1 Ответ

4 голосов
/ 31 мая 2019

Вот несколько подробных объяснений, которые я нашел в документации.Надеюсь, это поможет вам понять.

Операторы CREATE FUNCTION и INSERT записываются в двоичный журнал, поэтому ведомый будет выполнять их.Поскольку slave SQL thread has full privileges, он будет выполнять dangerous statement.Таким образом, вызов функции по-разному влияет на главное и подчиненное устройства и составляет not replication-safe.

. Чтобы защититься от этой опасности для серверов, на которых включено двоичное ведение журнала, создатели хранимых функций должны иметь привилегию SUPER, в дополнение кобычная привилегия CREATE ROUTINE, которая требуется.Аналогично, чтобы использовать ALTER FUNCTION, вы должны иметь привилегию SUPER в дополнение к привилегии ALTER ROUTINE.

Без привилегии SUPER произойдет ошибка:

ERROR 1419 (HY000): You do not have the SUPER privilege and
binary logging is enabled (you *might* want to use the less safe
log_bin_trust_function_creators variable)

Если вы не хотите, чтобы создатели функций имели привилегию SUPER (например, если все пользователи с CREATE ROUTINEпривилегиями в вашей системе являются опытные разработчики приложений), установите глобальную системную переменную log_bin_trust_function_creators в 1.

Вы также можете установить эту переменную, используя опцию --log-bin-trust-function-creators=1 при запуске сервера.Если двоичное ведение журнала не включено, log_bin_trust_function_creators не применяется.SUPER не требуется для создания функции, если, как описано ранее, значение DEFINER в определении функции не требует этого.

src: https://dev.mysql.com/doc/refman/8.0/en/stored-programs-logging.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...