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

一、实验目的

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

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

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

二、实验环境

计算机

windows7操作系统,

Oracle 11g, SQL Developer

三、实验内容及结果

授权

创建用户”S学号u1”,S学号u2,S学号u3,S学号U4,并为其赋予connect角色。

其中,学号是指你的学号,比如你的学号为20130001,则你创建的用户应该是S20130001u1,S20130001u2,S20130001u3,S20130001u4

代码: create user s2019214221u1 identified by nefu1234;

create user s2019214221u2 identified by nefu1234;

create user s2019214221u3 identified by nefu1234;

create user s2019214221u4 identified by nefu1234;

截图:

(之前做的当时忘记截图了,所以截了用户表)

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

代码:grant select

on jmy2019214221.student

to s2019214221u1;

截图:

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

代码:select * from jmy2019214221.student;

截图:

查询S20131用户Student表中所有姓刘的学生的姓名、学号和性别。

代码:select sno,sname,ssex from jmy2019214221.student where sname like ‘刘%’;

截图:

查询S20130001用户Student表中名字中第二字为“阳”字的学生的姓名和学号。

代码:select sname,sno from s2016214220. student

where sname like ‘_阳%’;

截图:

把S20130001用户的Student表和Course表的全部权限授予用户”S学号u2”, ”S学号u3”;然后让”S学号u2”用户修改S20130001的数据。

代码:GRANT all PRIVILEGES ON jmy2019214221.student

TO s2019214221u2,s2019214221u3;

GRANT all PRIVILEGES ON jmy2019214221.course

TO s2019214221u2,s2019214221u3;

截图:

修改:

DELETE FROM s2016214220.student WHERE s2016214220.student.sname = ‘李阳’;

截图:

把S20130001用户的表Student的修改学生学号的权限赋予用户” S学号U4”,然后让S20130001用户修改S20130001的student表的SNO数据。

代码:GRANT UPDATE(Sno)

ON Student

TO s2019214221U4;

截图:

修改:update s2019214221.Student set sno=‘2010’ where sno=‘200915121’;

截图:

把S20130001用户的SC表的插入权限授予“S学号U5”用户,然后让“S学号U5”用户向SC表插入一条记录。

代码:create USER s2019214221u5 identified by nefu1234;

grant insert

on jmy2019214221.sc to s209214221u5;

insert into jmy2019214221.sc values(200215121,7,85);

截图:

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

代码:grant select

on jmy2019214221.sc

to public;

截图:

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

代码:select sno,grade

from jmy2019214221.sc

where cno=‘3’

order by grade desc

截图:

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

代码: select cno,count(*)

from jmy2019214221.sc

group by cno;

截图:

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

回收权限

收回用户”S学号u2”修改学生学号的权限

代码:revoke update

on student

from s2019214221u2;//应先赋予u2该权限方可收回

截图:

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

代码: revoke select

on sc

from public

截图:

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

代码: grant insert

on jmy2019214221.student

to s2019214221u5;

revoke insert

on sc

from s2019214221u5;

截图:

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

代码:select * from sc;

  insert into jmy2019214221.sc values(200215121,7,85);

截图:

角色
        创建一个角色

代码:create role aowu;

截图:

        给角色授予权限

代码: grant select on jmy2019214221.student TO aowu;

截图:

        将角色授予某一用户

代码:grant aowu to s2019214221U1;

截图:

        检查用户是否具有相应的权限

代码: select * from JMY2019214221.STUDENT;

截图:

完整性

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

代码:create table Teacher

(Tno char (10) primary key,

Tname char (10) unique

);

截图:

建立学生登记表Student,要求学号在9000至9999之间,年龄<29,性别只能是’男’或’女’,姓名非空。

代码:create table student1

(Sno NUMBER primary key ,

Sname char (20) not null,

SSex char (2) check (SSex in (‘男’,‘女’)),

Sage int ,

check(Sno>9000 and Sno<9999 and Sage<29)

);

截图:

建立课程表COURSE,要求课程表中的每门课程的学分不得超过7分,且主讲教师字段TNO参照Teacher表TNO字段,且当删除教师表中一行记录时,如果它被参照,则将Course表中相应记录中TNO的值设置为空。

代码:CREATE TABLE course1 (

cno char(9),

cname char(9),

ccredit char(4) check(ccredit<7),

Tno char(9) references teacher(tno) on delete set null

);

截图:

建立表SC,要求SNO参照STUDENT表的学号,且当删除Student表中的一个学生记录时,级联删除学生的选课记录。

代码:create table sc1

( sno char (9) REFERENCES student (sno) on delete CASCADE,

cno char(9)

);

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值