我有一个用户可以访问mysql服务器上的几个数据库,即mysql db,information_schema db,test db等
是否可以限制此用户的访问权限,使“SHOW DATABASES
”命令甚至不会列出这些战略dbs?
答案 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将数据库实现为数据目录中的目录,因此该语句只列出该位置中的目录。但是,输出可能包括与实际数据库不对应的目录名称。
答案 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