我正在尝试在 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