gpt4 book ai didi

mysql - 授予对其他 MySQL 数据库的权限导致问题

转载 作者:行者123 更新时间:2023-11-29 06:53:44 24 4
gpt4 key购买 nike

我有一个用户“myuser”和两个数据库。 “db1”和“db2”。

myuser”已经拥有使用 db1 的权限,我想通过以下方式授予他使用“db2”的额外权限查询:

GRANT ALL ON db2.* TO 'myuser'@'localhost';

在我运行授权语句后,“myuser”失去了与第一个数据库“db1”的连接

恐怕我使用了错误的主机名。我应该使用 '%' 而不是 'localhost'。当我这样做时:

 select host from mysql.user where user = 'myuser';

现在我看到该用户的两条主机记录 '%' 和 'localhost'

当我运行 SHOW GRANT 语句时,我获得了不同主机的权限。 “本地主机”和“%”。

mysql> SHOW GRANTS FOR 'myuser'@'localhost';
+----------------------------------------------------------------------+
| Grants for myuser@localhost |
+----------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'myuser'@'localhost' |
| GRANT ALL PRIVILEGES ON `beta_version`.* TO 'myuser'@'localhost' |
+----------------------------------------------------------------------+

mysql> SHOW GRANTS FOR 'myuser'@'%';
+-----------------------------------------------------------------------------------------------------------+
| Grants for myuser@% |
+-----------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'myuser'@'%' IDENTIFIED BY PASSWORD '*6ASDFASDFASDF...'
| GRANT ALL PRIVILEGES ON `myuser`.* TO 'myuser'@'%'
+-----------------------------------------------------------------------------------------------------------+

是什么导致“myuser”在我的 PHP 脚本和 phpMyAdmin 中不起作用?

最佳答案

MySQL 通过用户名和主机来识别用户。当 MySQL 在登录时进行身份验证时,MySQL 首先查找完全匹配的主机名。如果找不到完全匹配的内容,则会查找包含“%”通配符的主机。

当你执行 GRANT ... TO myuser@localhost 时,MySQL 创建了一个新用户(没有密码,因为语句中没有给出 IDENTIFIED BY .

然后发生了什么,当您尝试从本地主机以 myuser 身份登录时,mysqld 尝试在 mysql 中查找与 'myuser'@'localhost' 匹配的条目.user 表,它找到了。 session 获得了分配给该用户的特权。

(更准确地说,mysqld并没有真正查看mysql.user表的内容,它真正查看的是内存中的结构,它是在构建时从表中填充的。A内存结构的重建由 GRANT、REVOKE 或 FLUSH PRIVILEGES 语句触发。)

在添加新用户之前发生了什么,mysqld 正在寻找用户和主机名的精确匹配,但没有找到。但它确实找到了带有 '%' 通配符的条目,因此它与之匹配,因此 session 获得了授予 'myuser'@'%' 用户的所有权限。


两个用户 'u'@'%''u'@'localhost' 是分开的,彼此不同。权限必须单独授予每个用户。授予 'u'@'%' 的任何权限仅适用于该用户,不适用于 'u'@'localhost'

关于mysql - 授予对其他 MySQL 数据库的权限导致问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13997275/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com