删除从用户查看战略数据库的功能

时间:2011-12-17 08:35:07

标签: mysql

我有一个用户可以访问mysql服务器上的几个数据库,即mysql db,information_schema db,test db等

是否可以限制此用户的访问权限,使“SHOW DATABASES”命令甚至不会列出这些战略dbs?

3 个答案:

答案 0 :(得分:1)

默认情况下,所有用户都可以看到information_schema表。它不是真正的表,而更像是只读视图的集合。对于每个用户,它仅显示用户具有访问权限的表和对象的值。如果您的用户通过phpMyAdmin访问,可以通过在配置文件中添加一行来隐藏它。像这样......

$cfg['Servers'][$i]['hide_db'] = '^information_schema$';

默认情况下,MySQL允许所有用户查看名为“test”的数据库以及以“test_”开头的任何数据库。这些行为由db数据库的mysql表中的行控制。在该表中搜索以“test”开头的Db字段中的条目,您将看到它们。它们在Host字段中包含“%”,并且空白User字段。有关更多信息,请参阅第2.10.2节。在此页面的“保护测试数据库”标题下的“MySQL文档的初始MySQL帐户的安全保护”...... http://dev.mysql.com/doc/refman/5.5/en/default-privileges.html

答案 1 :(得分:0)

根据MySQL show databases文档:

除非您具有全局SHOW DATABASES权限,否则您只能看到具有某种权限的数据库。您也可以使用mysqlshow命令获取此列表。

如果服务器是使用--skip-show-database选项启动的,除非您具有SHOW DATABASES权限,否则根本不能使用此语句。

MySQL将数据库实现为数据目录中的目录,因此该语句只列出该位置中的目录。但是,输出可能包括与实际数据库不对应的目录名称。

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

答案 2 :(得分:0)

您必须为其设置Show_db_priv

SHOW DATABASES权限允许帐户通过发出SHOW DATABASE语句来查看数据库名称。没有此权限的帐户只能看到具有某些权限的数据库,如果服务器是使用--skip-show-database选项启动的,则根本不能使用该语句。请注意,任何全局特权都是数据库的特权。

http://dev.mysql.com/doc/refman/5.5/en/privileges-provided.html#priv_show-databases