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

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


view
视图可以以不同角度来看数据,从而简化查询,其内容会随着数据改变而改变

  • 创建视图
    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 
  • 删除视图
    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 deleteinsert 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=ISwith 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

你可能感兴趣的:(数据库)