如果我有用户/主机对“root@“,是否有必要在 mysql host/users 表中保留“root@localhost”?(多部分问)

如果我有用户/主机对“root@“,是否有必要在 mysql host/users 表中保留“root@localhost”?(多部分问)

在计算机“dexwin10”上,用户@主机对如下:

root@dexwin10 

root@% 

root@localhost

当人们安装我们的软件时,我们希望他们能够从自己的计算机以外的计算机访问数据库。这告诉我不应将 localhost 作为主机名,但我不确定应该使用另外两个中的哪一个。

问题:

1A.)是否与我的计算机名称为 dexwin10root@dexwin10相同?或者是否意味着我只能从机器 dexwin10 登录/访问数据库,这是有道理的,因为您只能从本地主机登录到 root@localhost。root@localhostroot@dexwin10

B.) 如果我应该使用root@dexwin10而不是root@localhost,这是否意味着root@localhost可以删除?或者我是否需要 localhost 来防止出现问题?

2.) 在软件安装过程中,当系统要求我们输入包含要使用的数据库的主机名时,我是否应该指定主机名“%”,还是应该输入“dexwin10”?仅输入“%”作为主机名会产生哪些副作用?

3.(可选)如果root@(MachineName)root@%相同,为什么 MySQL 安装程序不会将您计算机的名称作为默认主机,而不是一些看似随机的字符串“localhost”?

我试图弄清楚为什么 root 有 3 个主机(一个是我的计算机名称,一个是 %,一个是 localhost),所有答案都在谈论默认的 mysql 用户/主机。这些不是默认用户。

答案1

“localhost” 是一个特殊名称。 name@localhost表示“套接字”连接。可以使用仅有的来自客户的相同的机器作为mysql服务器。

任何其他情况都意味着 TCP/IP 连接,可能成为不同的机器。

验证用户时,用户的名称和来源用于在表中查找一行GRANTmysql.user等)。也就是说,如果您通过 TCP/IP 进入,则不会localhost查看任何条目。反之亦然。

“当前机器”的 TCP/IP 地址是127.0.0.1。因此...

mysql -h localhost  -- uses a socket and checks `localhost` entries
mysql -h 127.0.0.1 -P 13306  -- uses TCP/IP on same machine
                        (and a non-standard Port)

一个有点“安全”的集合GRANTs包括:

GRANT ... TO root@localhost ...;  -- you have to get into the machine to use it
_no_ GRANT ... TO root@hostname ...;  -- don't allow access from elsewhere
GRANT ... ON dbname.* TO user@hostname ...;  -- allow a user into one database from anywhere

使用%(或其他通配符规范) 作为主机名会使服务器受到任意服务器的攻击。使用 IP 地址代替主机名稍微安全一些。

另请注意:

CREATE USAGE ON *.* TO root@'%';

没有任何权限GRANTs实际上允许“root”从任何地方进入,但没有授予他任何权限。这有点像“禁止进入”的标志。

看一眼

SELECT * FROM mysql.user;

请记住,这N意味着“不允许”。也许你会看到全部用户=root 主机=% 的 Ns。对于用户=root 主机=localhost,您可能会看到所有 Y,包括Grant_priv来自的WITH GRANT OPTION

在我喋喋不休的时候,REVOKE这是不成熟的。你只能“撤销”确切地以前是这样的GRANTed。您不能授予大量权限,然后删除其中的一部分。

相关内容