我第一次安装 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 发现了它!!!!!