这是一组正常的 MySQL 权限吗?

Chr*_*ris 9 mysql phpmyadmin

在本地测试 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 个任何用户都没有任何表的任何特定权限,因此看起来他们无能为力。这是某种通用安全措施,明确声明不属于任何其他用户组的“任何”用户没有特权吗?

Rol*_*DBA 6

实际上,这三个用户帐户实际上非常危险。它们对测试数据库构成了非常大的威胁。

不幸的是,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 将取消那些拥有测试数据库完全权限的帐户。