授权
创建用户”S学号u1”,S学号u2,S学号u3,S学号U4,并为其赋予connect角色。
其中,学号是指你的学号,比如你的学号为20130001,则你创建的用户应该是S20130001u1,S20130001u2,S20130001u3,S20130001u4
create user s2016214220u1 identified by nefu1234;
create user s2016214220u2 identified by nefu1234;
create user s2016214220u3 identified by nefu1234;
create user s2016214220u4 identified by nefu1234;
假设你的用户名是S2*******(做实验时请根据你的账号修改),把你在数据库中创建的Student表的查询权限授给用户”S学号u1”, ”S学号u1”执行相应的查询。
grant select
on s2016214220.student
to s2016214220u1
(1)查询S2*******用户的Student表中全体学生的详细记录
select * from student
(2)查询S2*******用户Student表中所有姓刘的学生的姓名、学号和性别。
select sno,sname,ssex from s2016214220.student where sname like '刘%';
(3)查询S2*******用户Student表中名字中第二字为“阳”字的学生的姓名和学号。
select sname,sno from s2016214220. student
where sname like '_阳%';
把S2*******用户的Student表和Course表的全部权限授予用户”S学号u2”, ”S学号u3”;然后让”S学号u2”用户修改S2*******的数据。
GRANT all privileges
ON s2016214220.student
TO s2016214220u2,s2016214220u3;
GRANT all privileges
ON s2016214220.course
TO s2016214220u2,s2016214220u3;
修改:
DELETE FROM s2016214220.student WHERE s2016214220.student.sname = '李阳'
把S2*******用户的表Student的修改学生学号的权限赋予用户” S学号U4”,然后让S2*******用户修改S2*******的student表的SNO数据。
grant alter
on student to s2016214220u4;
grant delete
on student to s2016214220u4;
grant update
on student to s2016214220u4;
grant insert
on student to s2016214220u4;
把S2*******用户的SC表的插入权限授予“S学号U5”用户,然后让“S学号U5”用户向SC表插入一条记录。
create user s2016214220u5 IDENTIFIED BY nefu1234;
grant insert
on s2016214220.sc to s2016214220u5;
insert into sc values(200215126,7,85);
把对表SC的查询权限授予所有用户。
(1)让“S学号u2”用户查询S2*******用户的SC表中选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列
grant select
on s2016214220.sc
to public
select sno,grade
from s2016214220sc
where cno='3'
order by grade desc
(2)让“S学号u2”用户查询S2*******用户的SC表中各个课程号与相应的人数。
select cno,count(*)
from s2016214220.sc
group by cno;
(首先应该以新创建的用户的身份重新登陆数据库,然后再进行授权)
回收权限
1.收回用户”S学号u2”修改学生学号的权限
revoke alter
on student
from s2016214220u2
收回所有用户对表sc的查询权限
revoke select
on sc
from public
3.收回用户”S学号U5”sc表的insert权限
revoke insert
on sc
from s2016214220u5
4.在回收权限之后验证用户是否真正丧失了该权限(查询表,插入记录)
select * from sc
角色
创建一个角色
create role we
给角色授予权限
grant select on sc to wt
将角色授予某一用户
grant we to public
检查用户是否具有相应的权限
select * from sc
完整性
1建立教师表Teacher,要求教师名称Tname列取值唯一,教师编号TNO列为主码。
CREATE TABLE teacher
(tno varchar2(10) primary key ,
tname varchar2(10) unique
);
2建立学生登记表Student,要求学号在9000至9999之间,年龄<29,性别只能是’男’或’女’,姓名非空。
3修改表Student的结构,由年龄小于29改为小于40。
alter table stu modify sage check(sage<49);
建立课程表COURSE,要求课程表中的每门课程的学分不得超过7分,且主讲教师字段TNO参照Teacher表TNO字段,且当删除教师表中一行记录时,如果它被参照,则将Course表中相应记录中TNO的值设置为空。
create table course1(
cno varchar2(4) constraint pk_c primary key,
cname varchar2(10),
tno varchar2(10) constraint fk_c_t references teacher(tno) On Delete Set NULL,
credit number(3) check (credit<=7)
);
建立表SC,要求SNO参照STUDENT表的学号,且当删除Student表中的一个学生记录时,级联删除学生的选课记录。
create table sc1(
cno varchar2(4) REFERENCES course1(cno) On Delete Cascade,
sno char(10)REFERENCES stu(sno) On Delete Cascade,
grade number(3),
primary key(cno,sno)
);
对上述新建立和修改定义的表,每个表输入3条数据,其中1条数据符合完整性约束,2条违反约束条件的,验证和体会Oracle的实体完整性和参照完整性。