Я пытаюсь настроить MySQL 5.1 на CentOS 6.6 таким образом, чтобы пользователи не могли видеть базы данных, к которым у них нет никаких прав. Если они выполнят команду [SHOW DATABASES], она должна вернуть только список баз данных, к которым у них есть права доступа (согласно таблице [db] в базе данных привилегий [mysql]). Никакая другая база данных не должна появляться в списке.
Я пробовал команды предоставления / отзыва привилегий в MySQL, но безуспешно. Я также пробовал использовать [skip-show-database] в my.cnf, но это вызывает ошибку (список вообще не отображается), если [Show_db_priv] не включен для пользователя.
Если вы правильно используете команду grant в sql, как показано ниже, вы можете заархивировать то, что хотите.
mysql -u root -p
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
mysql> create database test;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on test.* to 'user01'@'%' identified by 'password01';
Query OK, 0 rows affected (0.00 sec)
mysql -u user01 -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 44
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| test |
+--------------------+
2 rows in set (0.00 sec)
Приведенный выше результат - это тест, который я сделал
Добавить " --skip-show-database
"в сценарий запуска MySQL или добавьте его в файл конфигурации MySQL.
Предоставьте привилегию SHOW DATABASES только тем пользователям, которым вы хотите использовать эту команду
http://dev.mysql.com/doc/refman/5.0/en/show-databases.html
Чтобы отключить использование команды «SHOW DATABASES», в раздел [mysqld] файла /etc/my.cnf необходимо добавить следующий параметр:
[mysqld]
skip-show-database