【问题标题】:what is the meaning of "%" between when you create user and giving grant in mysql创建用户和在mysql中授予授权之间的“%”是什么意思
【发布时间】:2019-12-06 15:18:11
【问题描述】:

所以基本上当你创建一个用户并授予创建的用户授权时,'%' 和 'localhost' 的区别是什么。

当你创建/授予一个用户时会发生什么 'localhost' 和 '%' 每个

CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
vs
CREATE USER 'user'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON db.* TO 'user'@'localhost';
vs
GRANT ALL PRIVILEGES ON db.* TO 'user'@'%';

似乎如果我使用“localhost”创建用户,这意味着我只能在本地服务器中登录用户,而不是从远程登录。就'localhost'的授权而言,这是否意味着用户只能从本地服务器访问数据库,而不能从远程访问,对吗?

【问题讨论】:

  • 谢谢,但我知道 % 是什么意思。我只想知道'%'和'localhost'在创建用户和给予授权时的比较
  • 我稍微改变了这个问题。你能检查一下吗? @pnorton
  • Hi Byeonggil 你怎么读 CREATE USER 'user'@'%' IDENTIFIED BY 'password'; ?你测试了吗?
  • 参考:dev.mysql.com/doc/refman/5.7/en/account-names.html ... 围绕被问的问题跳舞。在 MySQL 中,这两个语句创建两个独立且不同的用户,每个用户都有自己的密码和权限。 (@'localhost' 仅用于连接 Unix 套接字。@'%' 允许从任何 IP 地址连接...

标签: mysql


【解决方案1】:

MySQL 将 '%' 视为与任何通过 TCP 连接的客户端匹配的通配符。所以任何主机名或任何 IP 地址,包括 127.0.0.1

MySQL 将 'localhost' 视为一种特殊情况。它仅匹配仅通过 UNIX 套接字连接的客户端。 UNIX 套接字比 TCP 快,但它只能在本地工作。

如果您想创建一个可以通过 TCP 或 UNIX 套接字从任何主机连接的用户,您必须实际创建两个用户。您可以为他们提供相同的密码并授予他们相同的权限。 MySQL 不保证这一点。

【讨论】:

  • 我的同事发现了一个奇怪的案例,使这更加令人困惑。 MySQL 的 Go 连接器在连接之前将“localhost”解析为其 IP 地址 127.0.0.1。所以它迫使你使用 TCP。每个其他 MySQL 客户端库都允许“localhost”表示 UNIX 套接字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
相关资源
最近更新 更多