第一次在 Windows 安装时,mysql.db 是空的,尽管我可以通过其他方式看到测试数据库

第一次在 Windows 安装时,mysql.db 是空的,尽管我可以通过其他方式看到测试数据库

我第一次安装 MySQL。我使用了适用于 Windows 的 MySQL 5.5.11,并使用了 MySql Server 实例配置向导,并选择了 root 密码。

当我测试系统时,与2.3.8. Windows 安装后程序一切都正常,除了我的mysql.db是空的,尽管我可以test使用mysqlshow和看到(空的)数据库SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA

我的安装有问题吗?或者仅仅是文档“错误”?

编辑:我确实选择不将匿名登录包含在 SICW 中,因此也许文档“错误”更接近事实,因为它应该提到如果没有安装匿名登录就不会列出它?

答案1

任何名为 test 或名称以 test 为前缀的数据库都将被允许对匿名帐户授予完全访问权限。根据MySQL 5.0 认证学习指南(ISBN 0-672-32812-7),第 498 页建议删除匿名帐户和测试数据库。

自撰写本文以来,MySQL 5.1 已将这两行填充到 mysql.db 中。我还没有看到任何相关记录。只需运行

DELETE FROM mysql.db;
FLUSH PRIVILEGES;
DROP DATABASE test;

您的所有烦恼都将消失!

请不要将任何测试数据库命名为 test,或 test_ <anything>

更新

让 mysql.db 保持干净是完全没问题的,尤其是测试数据库。MySQL 默认在 mysql.db 中包含了 test 和 test_%,并且具有所有权限。因此匿名登录可以访问任何测试数据库。简单的磁盘攻击就可能损害 mysql 安装。下面是一个例子:

USE test
CREATE TABLE rolando_tb (a int);
INSERT INTO rolando_tb VALUES (1);
INSERT INTO rolando_tb SELECT a FROM rolando_tb;
INSERT INTO rolando_tb SELECT a FROM rolando_tb;
INSERT INTO rolando_tb SELECT a FROM rolando_tb;
INSERT INTO rolando_tb SELECT a FROM rolando_tb;

运行插入 30 次,您将获得一个 7GB 的表

想象一下在测试数据库中创建几个这样的表

想象一下在测试数据库中创建一个存储过程

只要 test 和 test_% 存在于 mysql.db 中,可能性是无穷无尽的

这没有记录。应该有 !!!

这确实是安装安全领域的文档错误。+1 发现了它!!!!!

相关内容