我使用具有更新权限的用户来执行sql:
update stu set age = 27 where name='zjw';我发现了一个错误:
错误1143 (42000):选择表“stu”中“name”列的“update_ user”@‘localhost’拒绝的命令
像这样的桌子:
CREATE TABLE `stu` (
`id` int(11) NOT NULL,
`name` varchar(20) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
)update_user的特权是:
grant update on *.* to 'update_user'@'%';MySQL版本为5.1.73。
谢谢。
发布于 2015-09-14 06:51:09
@罗宾,根据你最后的评论,试着理解你的更新声明-
UPDATE `stu` SET age = 27 WHERE name = 'zjw';上面的update语句首先尝试获取名称= 'zjw‘的记录,所以如果您的name列被索引了,那么选择use index,然后直接选择那些值为'zjw’的记录,否则它会扫描整个表并在表的任何位置选择‘zjw’。
这意味着在更新之前,mysql首先在内部使用select语句,因此您还需要具有任何其他特权的select特权,如update/delete等。
所以你的命令应该是-
GRANT SELECT, UPDATE on db.* to 'myuser'@'localhost' identified by 'mypass';您应该根据要求只授予特定的IP或本地主机权限,而不是按“%”全局授予权限,这是有风险的。
https://stackoverflow.com/questions/32558442
复制相似问题