Короткая версия : Как я могу написать процедуру SQL, чтобы перечислить, к какой из нескольких таблиц в базе данных MySQL имеет доступ конкретный пользователь?
Более длинная версия :
Я пишу многопользовательское приложение, которое обращается к базе данных с данными для нескольких филиалов компании. База данных имеет несколько справочных таблиц, к которым имеет доступ любой пользователь, и таблицу для каждой ветви, к которой имеют доступ только авторизованные пользователи. Моя стратегия:
- Запись хранимой процедуры, которая возвращает список соответствующих таблиц, для которых пользователь имеет привилегию SELECT.
- Из приложения вызовите процедуру. Если возвращается только одна таблица, используйте ее, в противном случае позвольте пользователю выбрать, к какой ветви он хочет обратиться (например, для менеджеров).
У меня проблемы с выяснением, как написать такую хранимую процедуру. SHOW GRANTS FOR CURRENT_USER
является очевидной возможностью, но разбирает что-то вроде:
GRANT SELECT ON Company.BranchABC TO 'auser'@'%clientdomain.com'
в SQL, чтобы выяснить, какие таблицы кажутся способ слишком грязным. Выполнение SELECT
из реальных таблиц, которые содержат разрешения, также кажется проблематичным, поскольку мне пришлось бы дублировать логику MySQL для объединения разрешений из различных таблиц (user, db, host и т. Д.)
Какие-нибудь слова мудрости?