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

Скрыть список баз данных MySQL

Я пытаюсь настроить 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