鱼C论坛

 找回密码
 立即注册
查看: 575|回复: 3

[已解决]MySQL语法出错?

[复制链接]
发表于 2023-5-19 11:19:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目:使用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是库名吗?我原本的库名不是这个,需要新建或更改吗?谢谢!!
最佳答案
2023-5-19 13:05:43
黑脸艺术家 发表于 2023-5-19 11:39
“最后使用WITH GRANT OPTION选项允许“teacher”用户将他们所拥有的权限授予其他用户。”

可是题干 ...

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

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

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

  4. GRANT SELECT, UPDATE
  5. ON teaching_lab.成绩表
  6. TO 'teacher'@'localhost';
复制代码


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

对于你的另一个问题,“teaching_lab”确实应该是数据库的名称。如果你的数据库名称不是这个,你需要将上面的SQL语句中的“teaching_lab”替换为你的数据库名称。如果你的数据库中没有“课程表”和“成绩表”,你需要确保这两个表存在,或者替换为你的数据库中存在的表的名称。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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”用户将他们所拥有的权限授予其他用户。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-19 13:05:43 | 显示全部楼层    本楼为最佳答案   
黑脸艺术家 发表于 2023-5-19 11:39
“最后使用WITH GRANT OPTION选项允许“teacher”用户将他们所拥有的权限授予其他用户。”

可是题干 ...

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

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

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

  4. GRANT SELECT, UPDATE
  5. ON teaching_lab.成绩表
  6. TO 'teacher'@'localhost';
复制代码


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

对于你的另一个问题,“teaching_lab”确实应该是数据库的名称。如果你的数据库名称不是这个,你需要将上面的SQL语句中的“teaching_lab”替换为你的数据库名称。如果你的数据库中没有“课程表”和“成绩表”,你需要确保这两个表存在,或者替换为你的数据库中存在的表的名称。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 06:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表