隐藏 MySQL 数据库列表

隐藏 MySQL 数据库列表

我正在尝试在 CentOS 6.6 上配置 MySQL 5.1,使用户无法查看他们没有任何权限的数据库。如果他们执行命令 [SHOW DATABASES],它应该只返回他们有访问权限的数据库列表(根据 [mysql] 权限数据库中的 [db] 表)。任何其他数据库都不应出现在列表中。

我尝试过 MySQL 中的授予/撤销权限命令,但无济于事。我还尝试过在 my.cnf 中使用 [skip-show-database],但它会导致错误(根本不显示任何列表),除非为用户启用了 [Show_db_priv]。

答案1

如果您按照如下方式正确使用 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)

上面的输出是我做的这个测试

答案2

--skip-show-database在MySQL的启动脚本中 添加“ ”,或者在MySQL的配置文件中添加“ ”。

仅向您希望使用此命令的用户授予 SHOW DATABASES 权限

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

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

 [mysqld]
 skip-show-database

相关内容