黑脸艺术家 发表于 2023-5-19 11:19:58

MySQL语法出错?

题目:使用MySQL Workbench,为teacher语句授予teaching_lab数据库中课程表和成绩表的查找、修改数据权限,不允许权限转移。

GRANT SELECT,ALTER
ON teaching_lab.课程表,成绩表 TO 'teacher'@'localhost';

运行结果错误:Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ',成绩表 TO 'teacher'@'localhost'' at line 2

这个语法哪里出错了?
teaching_lab是库名吗?我原本的库名不是这个,需要新建或更改吗?谢谢!!

isdkz 发表于 2023-5-19 11:20:34

语法错误在于在GRANT语句中指定多个表时,需要使用逗号分隔每个表的名称,而不是在表名之间使用点号。此外,ALTER权限应该是针对表的修改权限,而不是针对数据的修改权限。以下是正确的语法:

GRANT SELECT, UPDATE
ON teaching_lab.课程表, teaching_lab.成绩表
TO 'teacher'@'localhost'
WITH GRANT OPTION;

在这个语句中,“teaching_lab”是一个现有的数据库名称,其中包含“课程表”和“成绩表”两个表。我们使用GRANT语句授予了“teacher”用户在这两个表上的SELECT和UPDATE权限,并且禁止了权限转移。最后,我们使用WITH GRANT OPTION选项允许“teacher”用户将他们所拥有的权限授予其他用户。

黑脸艺术家 发表于 2023-5-19 11:39:37

本帖最后由 黑脸艺术家 于 2023-5-19 11:43 编辑

isdkz 发表于 2023-5-19 11:20
语法错误在于在GRANT语句中指定多个表时,需要使用逗号分隔每个表的名称,而不是在表名之间使用点号。此外 ...

“最后使用WITH GRANT OPTION选项允许“teacher”用户将他们所拥有的权限授予其他用户。”

可是题干说是不允许teacher转移权限,还能写“WITH GRANT OPTION;”吗?我看课本上例题不允许权限转移的代码里面没有写这一行

然后我按你回答的正确语法输进去,依然显示错误:Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ', teaching_lab.成绩表 TO 'teacher'@'localhost' WITH GRANT OPTION' at line 2

框里有红色下滑波浪线提示:“,” is not valid at this position, expecting TO

isdkz 发表于 2023-5-19 13:05:43

黑脸艺术家 发表于 2023-5-19 11:39
“最后使用WITH GRANT OPTION选项允许“teacher”用户将他们所拥有的权限授予其他用户。”

可是题干 ...

抱歉,我误导了你。你完全正确,如果题目要求不允许权限转移,那么就不应该使用 "WITH GRANT OPTION"。

同时,我刚才给出的GRANT语句中,确实也存在一个错误。在一条GRANT语句中,我们无法同时对多个表授权。需要为每个表单独写一条GRANT语句。因此,你应该分别为课程表和成绩表授权,如下所示:

GRANT SELECT, UPDATE
ON teaching_lab.课程表
TO 'teacher'@'localhost';

GRANT SELECT, UPDATE
ON teaching_lab.成绩表
TO 'teacher'@'localhost';


这样,你将分别对课程表和成绩表授予“teacher”用户SELECT和UPDATE权限,并且不允许“teacher”用户将他们所拥有的权限授予其他用户。

对于你的另一个问题,“teaching_lab”确实应该是数据库的名称。如果你的数据库名称不是这个,你需要将上面的SQL语句中的“teaching_lab”替换为你的数据库名称。如果你的数据库中没有“课程表”和“成绩表”,你需要确保这两个表存在,或者替换为你的数据库中存在的表的名称。
页: [1]
查看完整版本: MySQL语法出错?