1.为了防止有人随意修改学生成绩,学校规定只能教务处(用户“user2”)才可以修改学生成绩表中的数据,普通教师用户(“user1”)不能随意修改学生成绩,否则输出“用户没有权限”。创建触发器完成上述成绩修改权限问题,具体步骤如下所示: (1)在数据库中创建两个用户“user1”和“user2”。 (2)查看数据库中所有的用户,确认两名用户创建成功。 (3)创建触发器(名字自拟,符合命名规则即可)完成成绩修改权限限制功能。 (4)分别使用用户“user1”和“user2”修改学生成绩表中任意学生成绩信息,查看结果。
时间: 2024-04-18 16:24:17 浏览: 146
学生成绩管理(实现插入、删除、修改和显示)
为了实现上述需求,你可以按照以下骤进行操作:
1. 创建两个用户 "user1" 和 "user2":
```sql
CREATE USER user1;
CREATE USER user2;
```
2. 确认用户创建成功:
```sql
SELECT usename FROM pg_user;
```
3. 创建触发器来限制成绩修改权限:
```sql
CREATE OR REPLACE FUNCTION restrict_grade_modification() RETURNS TRIGGER AS $$
BEGIN
IF current_user = 'user1' THEN
RAISE EXCEPTION '用户没有权限';
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER grade_modification_trigger
BEFORE UPDATE ON 学生成绩表
FOR EACH ROW
EXECUTE FUNCTION restrict_grade_modification();
```
4. 使用用户 "user1" 和 "user2" 分别修改学生成绩表中的信息,然后查看结果:
```sql
-- 使用 user1 修改学生成绩表
SET ROLE user1;
UPDATE 学生成绩表 SET 成绩 = 90 WHERE 学号 = '123456';
-- 使用 user2 修改学生成绩表
SET ROLE user2;
UPDATE 学生成绩表 SET 成绩 = 95 WHERE 学号 = '123456';
```
在步骤3中创建的触发器会检查当前用户是否为 "user1",如果是,则抛出异常并阻止修改操作。如果是其他用户,允许修改操作继续进行。
阅读全文