У меня есть пользователь MySQL, и я хочу, чтобы он просматривал ТОЛЬКО нужные мне представления, а не любую другую таблицу в базе данных. Я предоставил этому пользователю разрешения только для определенных представлений следующим образом:
GRANT SHOW VIEW ON `myDatabase`.`awesome_view` TO 'thisUser'@'%'
Если я сделаю show grants;
заявление, я могу видеть только эти разрешения, как и ожидалось. Однако я бы хотел, чтобы этот пользователь просто запрашивал представления, а не таблицы, связанные с этими представлениями, но я не могу найти способ сделать это. Похоже, что если я хочу, чтобы пользователь сделал выбор в представлении, выбор также должен быть предоставлен для таблицы, или я ошибаюсь?
Если я отрицаю select
утверждение в остальных таблицах и в командной строке, я пытаюсь сделать выбор, я получаю следующее:
SELECT * FROM myDatabase.fordibenForYouTable;
ERROR 1142 (42000): SELECT command denied to user 'thisUser'@'localhost' for table 'fordibenForYouTable'
Это то, что я действительно хочу, но мне также отказали, если я выбрал представление данных.
Есть ли способ, которым я могу сделать доступными для пользователя только представления, а не таблицы?
источник
Я знаю, что это старо, но вот что решило эту проблему для меня ...
Ответ был с синтаксисом «SQL SECURITY».
В моем исходном определении представления SQL SECURITY был установлен как «INVOKER». Это означало, что пользователь был вынужден иметь разрешение на выбор как для представления, так и для таблицы.
Когда я изменил SQL SECURITY на «DEFINER», я мог дать пользователю право выбора только для представления.
источник