SQL语言用 grant 语句向用户授予操作权限。一般形式为:
grant <权限1>,<权限n>
on <对象类型><对象名>
to <用户1>,<用户n>
with grant option
语义为:将对指定操作对象的指定操作权限授予指定用户
<权限>可以是:select,insert,update,delete,alter,index,all
例如:
--1.把查询表SC和修改其学号的权限授给用户U2和U4
grant select,update(sno)
on table SC
to U2,U4;
--2.把对表SC的insert权限授给用户U5,并允许将此权限再授予其它用户
grant insert
on table SC
to U5
with grant option;
U5还可以将次权限授予U6:
grant insert
on table SC
to U6; //U6不能再传播次权限
--3.DBA把在数据库Stud中建立表的权限授予用户U8
grant createtab
on database Stud
to U8;
注意:授予关于datebase(数据库)的权限必须与授予关于table(表)的权限分开,因为对象类型不同
授予的权限可以由DBA或其它授权者用revoke语句收回,其格式一般为:
revoke <权限>
on <对象类型><对象名>
from <用户1>,<用户n>
[cascade|restrict];
cascade指联级表,收回时用户转授予给别的用户的权限也会被收回。
restrict:限定只当依赖表中外码没有与目标表中要删除或修改的候选码对应时,系统才能对目标表中的候选码进行删除或修改,否则系统拒绝此操作
--1.收回所有用户对表SC的查询操作
revoke select
on table SC
from public
--2.把用户U5对SC表的insert权限收回
revoke insert
on table SC
from U5;
--3.取消Ling的存取Student表的特权
revoke all
on student
from Ling cascade //此时,被Ling转授的权限也被收回
视图机制
--1.仅允许用户U1拥有学生表student中所有男学生记录的查询和插入权限,允许用户U3拥有对该表中所有男学生记录的全部操作权限
解:先建立student中所有男学生记录的视图,再将该视图的select,insert权限授予U1
create view student_male
as select * from student
where sex='男';
grant select,insert
on student_male
to U1;
grant all privileges
on student_male
to U3;
--2.允许所有用户查询每个学生的平均成绩(不允许了解具体的各课程成绩)
crreate view grade_avg(sno,grade)
as select sno,avg(grade) from SC
group by sno;
grant select
on grade_avg
to public;