Назад | Перейти на главную страницу

Минимальные привилегии MySQL для получения размера базы данных / таблиц

Я использую centreon_plugins для мониторинга некоторых баз данных mysql. Лучше всего я создаю специального пользователя для мониторинга и даю ему минимально возможные привилегии.

Для простого мониторинга я обычно создаю пользователя монитора с двумя глобальными привилегиями:

mysql> create user 'monitor'@'%' identified by 'monitorpassword';
mysql> grant SHOW DATABASES, REPLICATION CLIENT on *.* to 'monitor'@'%';
mysql> flush privileges;

Теперь мне нужно проверить размер базы данных. Чтобы получить доступ к размеру БД, мне нужно, чтобы пользовательский монитор мог получить доступ к информации_schema.tables, но я не могу предоставить ему права прямого выбора для этой таблицы.

Очевидно, что пользователь root, которого я использую, имеет привилегию GRANT.

mysql> show grants;
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION        |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql> grant SELECT on information_schema.tables to 'monitor'@'%';
ERROR 1044 (42000): Access denied for user 'root'@'localhost' to database 'information_schema'

В доступе отказано из-за особого использования, которое mysql резервирует для базы данных information_schema; доступ к этой БД ограничен предоставленным доступом ко всем другим объектам mysql. Я мог бы добиться результата, дав привилегию SELECT на . для мониторинга пользователя, но я не хочу этого делать, потому что пользователь монитора недостаточно защищен (т.е. его пароль хранится в виде открытого текста в программном обеспечении для мониторинга), и поэтому он не должен иметь возможность видеть данные приложения.

Я пробовал различные комбинации привилегий для разных БД и таблиц, и ни одна из них не работает. (исх. https://dev.mysql.com/doc/refman/5.7/en/grant.html)

У кого-то была такая же потребность? Как он / она решил это?

Для полноты картины плагином мониторинга выполняются следующие запросы:

show variables like 'innodb_file_per_table'
SELECT table_schema, table_name, engine, data_free, data_length+index_length as data_used, (DATA_FREE / (DATA_LENGTH+INDEX_LENGTH)) as TAUX_FRAG FROM information_schema.tables WHERE table_type = 'BASE TABLE' AND engine IN ('InnoDB', 'MyISAM')

Заранее спасибо. Флавио