Список таблиц, для которых у пользователя есть привилегия SELECT в MySQL

Краткая версия : как я могу написать процедуру SQL, чтобы перечислить, к какой из нескольких таблиц в базе данных MySQL имеет доступ конкретный пользователь ?

Более длинная версия :

Я пишу многопользовательское приложение, которое обращается к базе данных с данными для нескольких филиалов компании. В базе данных есть несколько таблиц поиска, к которым может получить доступ любой пользователь, и таблица для каждой ветви, доступ к которой имеют только авторизованные пользователи. Моя стратегия:

  • Напишите хранимую процедуру, которая возвращает список соответствующих таблиц, для которых пользователь имеет привилегию SELECT.
  • Из приложения вызовите процедуру. Если возвращена только одна таблица, используйте ее, в противном случае позвольте пользователю выбрать, к какой ветви он хочет получить доступ (например, для менеджеров).

У меня возникли проблемы с тем, чтобы понять, как написать такую ​​хранимую процедуру. SHOW GRANTS FOR CURRENT_USER - очевидная возможность, но анализ чего-то вроде:

GRANT SELECT ON Company.BranchABC TO 'auser'@'%clientdomain.com'

в SQL, чтобы выяснить, что это за таблицы, кажется способом слишком беспорядочным. Выполнение SELECT из реальных таблиц, содержащих разрешения, также кажется проблематичным, потому что мне пришлось бы дублировать MySQL » s логика для объединения разрешений из различных таблиц (пользователь, база данных, хост и т. д.)

Какие мудрые слова?

7
задан Scott Deerwester 17 February 2011 в 03:07
поделиться