Список таблиц, для которых пользователь имеет привилегию SELECT в MySQL - PullRequest
6 голосов
/ 17 февраля 2011

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

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

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

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

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

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

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

Какие-нибудь слова мудрости?

Ответы [ 3 ]

3 голосов
/ 17 февраля 2011

Я никогда не предоставлял разрешения для каждой таблицы пользователям MySQL прежде, но для этого вы должны проверить, что таблица TABLE_PRIVILEGES в базе данных information_schema.

Это должно указать вам правильное направление.

1 голос
/ 29 мая 2018

Вы можете увидеть, какие привилегии для каких таблиц имеет пользователь:

show grants for 'user'@'host';

Например, чтобы увидеть привилегии пользователя user1 (все машины в сети 10.25), выполните:

show grants for 'user'@'10.25.%.%';
1 голос
/ 17 мая 2012

Список пользователей MySQL и его привилегии можно проверить с помощью запроса.

select * from mysql.user\G;

http://www.thedevheaven.com/2012/04/retrieve-mysql-users-list-and-its.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...