隐藏MySQL数据库列表

我试图在CentOS 6.6上configurationMySQL 5.1,这样用户将无法看到他们没有任何权限的数据库。 如果他们执行命令[SHOW DATABASES],它应该只返回他们有权访问的数据库列表(按照[mysql]特权数据库中的[db]表)。 任何其他数据库不应该出现在列表中。

我已经尝试了MySQL中的grant / revoke特权命令,但没有运气。 我也尝试在my.cnf中使用[skip-show-database],但除非为用户启用了[Show_db_priv],否则会导致错误(根本不显示任何列表)。

如果您在sql中以正确的方式使用grant命令,则可以将您想要的内容归档。

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) 

以上输出是我做的这个testing

将“ --skip-show-database ”添加到MySQL的启动脚本或将其添加到MySQLconfiguration文件。

仅将SHOW DATABASES权限授予要使用此命令的用户

http://dev.mysql.com/doc/refman/5.0/en/show-databases.html

要禁止使用“SHOW DATABASES”命令,应在/etc/my.cnf的[mysqld]部分中添加以下参数:

  [mysqld] skip-show-database