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-адреси, звідки є доступ).