为什么在某些授权命令中“identified by”是必需的?

5

我不明白这个。我有一个名为my_database的数据库和一个名为tablename的表。我有一个名为ken的用户,该用户只能读取数据库。这个用户已经设置了密码,并且远程使用此用户名。我想在tablename上给他们一些权限。

这行不通:

mysql> grant SELECT, INSERT, UPDATE, DELETE on my_database.tablename to 'ken'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

但是这个会:
mysql> grant SELECT, INSERT, UPDATE, DELETE on my_database.tablename to 'ken'@'%' identified by password '<existing password hash>';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

为什么?我以为如果他们已经是用户,identified by 部分是可选的。

只是出于好奇:为什么你会做一些如此混淆的事情,比如授予一个名为“read_only”的用户INSERTUPDATEDELETE的能力(这似乎表明他们只允许从数据中读取(SELECT)?这对我来说似乎是一个非常糟糕的想法。 - Ken White
嗯...好的。个人而言,我会选择“我有一个用户,名叫乔...”。 :-) - Ken White
1
你能在同一服务器上的干净数据库中重现这种行为吗?在没有密码的情况下,SHOW GRANTS FOR ken@'%' 在GRANT语句之前和之后分别给出了什么? - miken32
我开始觉得这可能是某种复制问题。我想我会关闭这个问题。 - coding_hero
你最好把它删除掉。只是浪费了5分钟,而且无法再现。 - fancyPants
显示剩余3条评论
2个回答

0

很可能是MySQL复制问题。


0
也许您可以限制GRANT语句,只有在用户使用特定的身份验证方法(这里是密码)登录时才能执行。至少在CREATE USER语句中是这样的,我认为在这里应该也是类似的...
有关详细信息,请在this页面上搜索auth_option

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接