在本地测试 wamp 设置上使用 phpmyadmin,以及几乎标题所述,有 3 个用户标记为 user = ANY,password = NO,例如:
USER | HOST | Password | Global Priv | Grant
-----+---------+----------+-------------+------
Any | % | No | USAGE | No
Any | Local | No | USAGE | No
Any | Domain | No | USAGE | No
-----+---------+----------+-------------+------
Run Code Online (Sandbox Code Playgroud)
3 个任何用户都没有任何表的任何特定权限,因此看起来他们无能为力。这是某种通用安全措施,明确声明不属于任何其他用户组的“任何”用户没有特权吗?
实际上,这三个用户帐户实际上非常危险。它们对测试数据库构成了非常大的威胁。
不幸的是,mysql 具有对测试数据库的完全访问权限。你怎么能找到他们?
运行此查询:
SELECT user,host,db from mysql.db;
Run Code Online (Sandbox Code Playgroud)
安装 mysql 后,您将看到两行可以完全访问名为“test”或前 5 个字符为“test_”的任何数据库。
为什么这是个问题 ???
尝试运行此命令:
$ mysql -u'' -Dtest
Run Code Online (Sandbox Code Playgroud)
您将在没有密码的情况下连接测试数据库。
现在,创建一个表并用一行加载它:
CREATE TABLE mytable (a int);
INSERT INTO mytable VALUES (1);
Run Code Online (Sandbox Code Playgroud)
好吧,大不了。你能把这张桌子的大小翻倍 30 倍吗???
INSERT INTO mytable SELECT * FROM mytable;
INSERT INTO mytable SELECT * FROM mytable;
... (30 times)
INSERT INTO mytable SELECT * FROM mytable;
Run Code Online (Sandbox Code Playgroud)
你得到了什么 ??一个包含 1,073,741,824 行的表。轻松,4GB+。
想象一下创建任何大小的任何表。如何在测试数据库中创建一堆表并随意访问它们?
在这些情况下,您可以做的最好的事情是运行此查询:
DELETE FROM mysql.db;
Run Code Online (Sandbox Code Playgroud)
并重新启动mysql。然后,这三个帐户将被正确地禁用。
试一试 !!!
更新 2011-09-12 10:00 EDT
这次删除:
DELETE FROM mysql.db;
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)
这正是您初始安装所需要的。但是,如果您已经建立了用户,则可以改为运行:
DELETE FROM mysql.db WHERE db IN ('test','test_%');
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)
这将删除特定的两个数据库权限。
正如我在回答中提到的,这三个权限对于测试数据库来说是非常危险的。运行此 DELETE 将取消那些拥有测试数据库完全权限的帐户。
归档时间: |
|
查看次数: |
7551 次 |
最近记录: |