|
发表于 2023-7-3 11:53:58
|
显示全部楼层
我看你创建的触发器基本正确,只是有几个地方要注意。MySQL不支持 USER 关键字获取当前用户,你应该使用 CURRENT_USER 。但是, CURRENT_USER 返回的是一个包含用户名和主机名的字符串,例如'user1@localhost'。你需要只比较用户名部分。所以你需要使用SUBSTRING_INDEX函数来分割用户名和主机名。
此外,MySQL的触发器中没有 RAISE_APPLICATION_ERROR 函数,你可以使用SIGNAL来抛出一个异常。
修改后的触发器定义应该像这样:
- DELIMITER $$
- CREATE TRIGGER restrict_grade_update
- BEFORE UPDATE
- ON 学生成绩表
- FOR EACH ROW
- BEGIN
- DECLARE allowed_user VARCHAR(20) DEFAULT 'user2';
- DECLARE current_user VARCHAR(20);
-
- SET current_user = SUBSTRING_INDEX(USER(),'@',1);
-
- IF current_user != allowed_user THEN
- SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '用户没有权限';
- END IF;
- END$$
- DELIMITER ;
复制代码
请注意:这个触发器会阻止非user2用户更新学生成绩表中的任何行。如果你只希望在某些特定情况下阻止,你需要在 IF 语句中加入更多条件。
另外,SQL语句的具体语法可能会根据数据库的类型和版本有所不同。以上的SQL语句适用于MySQL数据库。如果你使用的是其他类型的数据库,如Oracle或PostgreSQL,你可能需要调整上述SQL语句来适应你的特定环境。 |
|