2.6.1.3.6. При включении ограничения доступа по IP пропадает доступ к представлениям (View)
Причина
При создании View в нём по умолчанию фиксируется DEFINER = example_db@% (пользователь с доступом с любых IP). Настройки ограничения доступа при этом роли не играют.
После включения ограничения доступа у пользователя из этого DEFINER пропадает доступ к SELECT-запросам (он может подключаться к базе данных, но без доступа к таблицам). Из-за этого View перестаёт работать и при попытке его открытия возникает ошибка вида «#1143 - Команда SELECT запрещена пользователю 'example_db'@'%' для столбца 'column_name' в таблице 'tbl_name'».
Решение
Доступно два способа решения проблемы:
- Отключить и не использовать ограничения доступа.
- Пересоздать View с флагом
SQL SECURITY INVOKER.
SQL-запрос для пересоздания View:
ALTER SQL SECURITY INVOKER VIEW view_name AS SELECT * FROM tbl_name;
Замена DEFINER на INVOKER помогает, потому что при этом для выборки начинают использоваться привилегии пользователя, который подключился (а он может подключаться только с IP-адреса, откуда есть доступ).