在计算机“dexwin10”上,用户@主机对如下:
root@dexwin10
root@%
root@localhost
当人们安装我们的软件时,我们希望他们能够从自己的计算机以外的计算机访问数据库。这告诉我不应将 localhost 作为主机名,但我不确定应该使用另外两个中的哪一个。
问题:
1A.)是否与我的计算机名称为 dexwin10root@dexwin10
相同?或者是否意味着我只能从机器 dexwin10 登录/访问数据库,这是有道理的,因为您只能从本地主机登录到 root@localhost。root@localhost
root@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 连接,可能成为不同的机器。
验证用户时,用户的名称和来源用于在表中查找一行GRANT
(mysql.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
。您不能授予大量权限,然后删除其中的一部分。