实验三 数据库的安全性和完整性控制

 

 

 

实验名称

实验三  数据库的安全性和完整性控制

实验教室

913

实验日期

 2018年10月22日

学    号

2016214220

姓    名

**

专业班级

计算机科学与技术2016级 *班

指导教师

王阿川

 

 

 

 

 

 

东北林业大学

信息与计算机科学技术实验中心

 

 

一、实验目的

(1)通过本实验能够熟练应用sql语言进行用户权限的授予和回收。

(2) 熟练掌握实体完整性,参照完整性及用户定义的完整性的定义。

(3)体会oracle数据库系统在安全性和完整性保护方面的特性。

二、实验环境

计算机

windows7操作系统,

Oracle 11g, SQL Developer

三、实验内容及结果

  • 授权
  1. 创建用户”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;

  1. 假设你的用户名是S20130001(做实验时请根据你的账号修改),把你在数据库中创建的Student表的查询权限授给用户”S学号u1”, ”S学号u1”执行相应的查询。
    grant select

on s2016214220.student

to s2016214220u1

(1)查询S20130001用户的Student表中全体学生的详细记录

select * from student

 

 

 

(2)查询S20130001用户Student表中所有姓刘的学生的姓名、学号和性别。
select sno,sname,ssex from s2016214220.student where sname like '刘%';

(3)查询S20130001用户Student表中名字中第二字为“阳”字的学生的姓名和学号。
select sname,sno from s2016214220. student

where sname like '_阳%';

  1. 把S20130001用户的Student表和Course表的全部权限授予用户”S学号u2”, ”S学号u3”;然后让”S学号u2”用户修改S20130001的数据。
    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 = '李阳'

 

  1. 把S20130001用户的表Student的修改学生学号的权限赋予用户” S学号U4”,然后让S20130001用户修改S20130001的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;

  1. 把S20130001用户的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);

  1. 把对表SC的查询权限授予所有用户。

(1)让“S学号u2”用户查询S20130001用户的SC表中选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列
      grant select

on s2016214220.sc

to public


select sno,grade

from s2016214220sc

where cno='3'

order by grade desc

(2)让“S学号u2”用户查询S20130001用户的SC表中各个课程号与相应的人数。

       select cno,count(*)

from s2016214220.sc

group by cno;

 

(首先应该以新创建的用户的身份重新登陆数据库,然后再进行授权)

  • 回收权限

1.收回用户”S学号u2”修改学生学号的权限
revoke alter

on student

from s2016214220u2
 

  1. 收回所有用户对表sc的查询权限

 revoke select

on sc

from public


 

3.收回用户”S学号U5”sc表的insert权限
  revoke insert

on sc

from s2016214220u5
 

4.在回收权限之后验证用户是否真正丧失了该权限(查询表,插入记录)
select * from sc
 

  • 角色
  1. 创建一个角色
     create role we

给角色授予权限
      grant select on sc  to wt

 

将角色授予某一用户
  grant we to public

  1. 检查用户是否具有相应的权限
     select * from sc

     
  • 完整性

1建立教师表Teacher,要求教师名称Tname列取值唯一,教师编号TNO列为主码。
 CREATE TABLE teacher

         (tno   varchar2(10)  primary key ,

            tname  varchar2(10)  unique

          );

2建立学生登记表Student,要求学号在90009999之间,年龄<29,性别只能是,姓名非空。

 

3修改表Student的结构,由年龄小于29改为小于40
alter table stu modify sage check(sage<49);

 

  1. 建立课程表COURSE,要求课程表中的每门课程的学分不得超过7分,且主讲教师字段TNO参照TeacherTNO字段,且当删除教师表中一行记录时,如果它被参照,则将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)

);

  1. 建立表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的实体完整性和参照完整性。

 

 

 

 

四、实验过程分析与讨论

创建的用户成为该角色的成员,并授予一定的操作权限时,无法找到到哪儿去进 行权限设置,最后通过百度搜索找到如何设置角色的权限

 

五、指导教师意见

        

指导教师签字: 

                                        2018 年 10月 25 日

 

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