2.6.1.3.6. При включении ограничения доступа по IP пропадает доступ к представлениям (View)

При создании View в нём по умолчанию фиксируется DEFINER = example_db@% (пользователь с доступом с любых IP). Настройки ограничения доступа при этом роли не играют.

После включения ограничения доступа у пользователя из этого DEFINER пропадает доступ к SELECT-запросам (он может подключаться к базе данных, но без доступа к таблицам). Из-за этого View перестаёт работать и при попытке его открытия возникает ошибка вида «#1143 - Команда SELECT запрещена пользователю 'example_db'@'%' для столбца 'column_name' в таблице 'tbl_name'».

Доступно два способа решения проблемы:

SQL-запрос для пересоздания View:

ALTER SQL SECURITY INVOKER VIEW view_name AS SELECT * FROM tbl_name;

Замена DEFINER на INVOKER помогает, потому что при этом для выборки начинают использоваться привилегии пользователя, который подключился (а он может подключаться только с IP-адреса, откуда есть доступ).

Содержание