【数据库】视图、权限授予
-
创建视图 create view(列) as select… with check option(限制更新)
create view SdeptAge(Sdept,Age)as select Sdept,Avg(Sage)from Student group by Sdept
-
经常查询学生的姓名 性别 课程 成绩 直接弄一个视图 就不用每次查了
create view StCInfo(Sname,Ssex,Cname,Grade)as select Sname,Ssex,Cname,Grade from Student join SC on Student.Sno=SC.Sno join Course on SC.Cno = Course.Cno
-
删除视图 drop view 视图名 删除视图没有影响,删除视图里面的数据就有影响 更新视图 alter view 视图名(基础数据库也会改变) 创建一个CS系 所有成绩均为 优秀的学生视图(学生姓名、年龄、性别、系、平均成绩)
create view CSExSt(Sname,Sage,Ssex,Sdept,AvgGrade) as select Sname,Sage,Ssex,Sdept,(Select avg(Grade) from SC where Sno=s.Sno) from Student as s where Sdept=CS and Sno not in (select Sno from SC where Grade<90) and Sno in (select Sno from SC)
-
针对视图进行更新,将平均成绩最高的同学年龄减10岁
select * from CSExSt update CSExSt set Sage = Sage - 10 where Sname in ( select top 1 Sname from CSExSt order by AvgGrade Desc)
权限要素
-
数据对象:表,视图 数据操作:查询select、增insert、删delete、改update
权限授予
- 将权限授予用户 Grant 权限 to 用户 但该用户不能授权给他人 Grant 操作(列) on 表/视图 to 用户
- 将权限授予用户 Grant 权限 to 用户 但该用户能授权给他人 Grant 操作(列) on 表/视图 to 用户 with grant option
- 删除的修改的查询中如果有查询条件,那么查询也要获得权限
- 所有用户 public 当前用户 user
权限回收 revoke 操作(列) on 表/视图 from 用户
与with grant option对应:cascade
分级授权 通过视图结合授权来实现
-
让用户U1可以查询学生姓名、性别
grant select(Sname、Ssex)on Student to U1
-
让用户U2可以查询学生所有信息
grant select on Student to U2
-
用户U1能够插入学生的信息
grant insert(Sname、Ssex)on Student to U1 ❌ grant delete,insert on Student to U1 -- delete insert 不能单个授予 但能合起来授予 -- select update 可以
-
所有用户都可以查询课程信息
grant select on Course to public
-
回收用户U1查询权限
revoke select on Student from U1
-
让用户U1只能查询IS系学生学号和姓名
create view ISSt as select Sno,Sname from Student where Sdept=‘IS’ with check option grant select on ISSt
-
做一个授权,每个教师能够查询和修改选自己所教课程的学生信息(Sno,Sname,Ssex,Sage,Grade,Cname) Student(Sno,Sname,Ssex,Sage,Sdept) Course(Cno,Cname,Ccredit,Cpno,Tname) SC(Sno,Cno,Grade)
creat view TSInfo(Sno,Sname,Ssex,Sage,Grade,Cname) as select s.Sno, Sname,Ssex,Sage,Grade,Cname,Tname from Student as s join on s.Sno=SC.Sno join Course as c on SC.Cno = c.Cno where Tname = USER grant select,update on TSInfo to public
DDL 对象 creat alter DML 操作 select insert update delete DCL 控制 grant revoke