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

Зміст