【数据库】视图、权限授予

    创建视图 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

权限授予

  1. 将权限授予用户 Grant 权限 to 用户 但该用户不能授权给他人 Grant 操作(列) on 表/视图 to 用户
  2. 将权限授予用户 Grant 权限 to 用户 但该用户能授权给他人 Grant 操作(列) on 表/视图 to 用户 with grant option
  3. 删除的修改的查询中如果有查询条件,那么查询也要获得权限
  4. 所有用户 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

经验分享 程序员 微信小程序 职场和发展