实验内容:

(一)    授权
. 以dba用户的身份登陆oracle,创建用户u1+学号后四位,u2+学号后四位。
SQL> create user u1_3985 identified by "";
SQL> create user u2_3985 identified by "";
SQL> create user u3_3985 identified by "";
SQL> create user u4_3985 identified by "";
. 对1.中创建的用户授予connect,resource的权限。
SQL> grant connect,resource to u1_3985,u2_3985;
. 用户jsj***把查询Student表权限授给用户u1+学号后四位,u1执行相应的查询。
SQL> grant select on student to u1_3985;
SQL> con u1_3985/@orcl;
) 查询jsj***用户的全体学生的详细记录。
SQL> select * from j2014213985.student ;
) 查询jsj***用户的所有姓刘的学生的姓名、学号和性别。
SQL> select sname,sno,ssex from j2014213985.student where sname like '刘%';
) 查询jsj***用户的名字中第二字为“勇”字的学生的姓名和学号。
SQL> select sname,sno from j2014213985.student where sname like '_明';
. 用户jsj***把对Student表和Course表的全部权限授予用户u2+学号后四位,u3+学号后四位;u2+学号后四位用户修改jsj***的数据。
SQL> grant all privileges on student to u2_3985,u3_3985;
SQL> grant all privileges on course to u2_3985,u3_3985;
SQL> update j2014213985.student set sage= where sname='刘明';
. 把对表SC的查询权限授予所有用户。
SQL> grant select on SC to public;
) 查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列
SQL> con u1_3985/@orcl;
SQL> select sno,grade from j2014213985.SC where cno= order by grade desc;
) 查询各个课程号与相应的选课人数。
SQL> select cno,count(*) from j2014213985.SC group by cno;
. 用户jsj***授予用户u4+学号后四位对student表的insert权限,并允许此权限传播。
SQL> con j2014213985/j123456@orcl;
SQL> grant insert on student to u4_3985 with grant option;
. 用户u4+学号后四位将对表student的insert权限授予u5+学号后四位,并允许将权限转授给其他用户。(首先应该以u5+学号后四位的身份重新登陆数据库,然后再进行授权)
SQL> con u4_3985/@orcl;
SQL> grant insert on j2014213985.student to u5_3985 with grant option;
SQL> con u5_3985/@orcl;
SQL> grant insert on j2014213985.student to u1_3985 with grant option;
(二) 回收权限
. 收回所有用户对表sc的查询权限
SQL> revoke select on SC from public;
. 收回用户u4对student表的insert权限
SQL> revoke insert on student from u4_3985;
. 在回收权限之后验证用户是否真正丧失了该权限(查询表,插入记录)
SQL> select * from j2014213985.SC;
select * from j2014213985.SC
ORA-: 表或视图不存在
SQL> insert into j2014213985.student values('','小屋','男',,'MA');
insert into j2014213985.student values('','小屋','男',,'MA')
ORA-: 表或视图不存在
(三) 角色
. 创建一个角色
SQL> create role ro1;
. 给角色授予权限
SQL> grant insert,update,select on student to ro1;
. 将角色授予某一用户
SQL> grant ro1 to u1_3985;
. 检查用户是否具有相应的权限
SQL> con u1_3985/@orcl;
SQL> select * from j2014213985.student;
SQL> insert into j2014213985.student values('','徐梅','女',,'MA');
SQL> update j2014213985.student set sage= where sname='刘明';
检查此用户是否具有相应权限。
SQL> con j2014213985/j123456@orcl;
SQL> insert into student values('','张悦','女',,'MA');
SQL> select * from student;
SQL> update student set sage= where sname='刘明';
(四) 完整性
. 建立部门表DEPT,要求部门名称Dname列取值唯一,部门编号Deptno列为主码
create table DEPT(
Deptno varchar() constraint a1 primary key,
Dname varchar() unique not null,
Dnum number());
()SQL> insert into DEPT values('','宏光实业',);
()SQL> insert into DEPT values('','宏光实业',);
insert into DEPT values('','宏光实业',)
ORA-: 违反唯一约束条件 (J2014213985.SYS_C0039963)
()SQL> insert into DEPT values('','长青实业',);
insert into DEPT values('','长青实业',)
ORA-: 违反唯一约束条件 (J2014213985.A1)
. 建立学生登记表Student,要求学号在9000至9999之间,年龄<,性别只能是’男’或’女’,姓名非空。
create table Student2(
sno number() check(sno>= and sno<=),
sanme varchar() not null,
sage number() constraint a2 check(sage<),
ssex varchar() check(ssex in('男','女'))); ()SQL> insert into student2 values(,'李二',,'男');
()SQL> insert into student2 values(,'张三',,'男');
insert into student2 values(,'张三',,'男')
ORA-: 违反检查约束条件 (J2014213985.SYS_C0039970)
()SQL> insert into student2 values(,'张三',,'男');
insert into student2 values(,'张三',,'男')
ORA-: 违反检查约束条件 (J2014213985.A2)
. 修改表Student的结构,由年龄小于29改为小于40。
SQL> alter table Student2 drop constraint a2;
SQL> alter table Student2 add constraint a2 check(sage<); ()SQL> insert into student2 values(,'张三',,'男')
()SQL> insert into student2 values(,'王五',,'男');
insert into student2 values(,'王五',,'男')
ORA-: 违反检查约束条件 (J2014213985.A2)
()SQL> insert into student2 values(,'',,'男');
insert into student2 values(,'',,'男')
ORA-: 无法将 NULL 插入 ("J2014213985"."STUDENT2"."SANME")
. 建立职工表EMP,要求每个职工的应发工资不得超过3000元。应发工资实际上就是实发工资列Sal与扣除项Deduct之和。
create table EMP(
sname varchar() primary key,
salary number() check(salary<=),
Sal number(),
Deduct number());
()SQL> insert into EMP values('李二',,,);
()SQL> insert into EMP values('张三',,,);
insert into EMP values('张三',,,)
ORA-: 违反检查约束条件 (J2014213985.SYS_C0039991)
()SQL> insert into EMP values('李四',,,);
insert into EMP values('李四',,,)
ORA-: 违反检查约束条件 (J2014213985.SYS_C0039991) 对上述新建立和修改定义的表,每个表输入3条数据,其中1条数据符合完整性约束,2条违反约束条件的,验证和体会Oracle的实体完整性和参照完整性。

实验分析:

在本次数据库实验中,我完成了实验要求。本次实验内容是关于sql语言进行用户权限的授予和回收,实体完整性,参照完整性及用户定义的完整性的定义。在课堂上,老师讲授了oracle的安全性和完整性控制相关知识,我也用笔练习写了sql语句,但是感觉印象还不是很深刻,有些不太理解。在实验课中我练习了sql语句,对课堂上所学的知识有了更深的理解,收获很多。实验中,我遇到了一些问题,通过查询资料和老师同学帮助最终解决了。遇到的问题如下:

1、在授予权限时,grant <权限> on table <表名> to <用户> ;这样写后一直报错,后来同学告诉我不能加table ,因为oracle的数据库与数据库标准原理有一点区别,修改后,果然对了。

2、在切换用户时,我不知道怎么切换,记得老师讲过,就是想不起来具体怎么做,后来问了同学,同学告诉我这样写 con user/pass@orcl;  这样写果然切换用户成功了。

在本次试验中收获很多,很开心。

数据库---实验四 oracle的安全性和完整性控制的更多相关文章

  1. MySQL数据库实验四:嵌套查询

    实验四          嵌套查询 一.实验目的 掌握SELECT语句的嵌套使用,实现表的复杂查询,进一步理解SELECT语句的高级使用方法. 二.实验环境 三.实验示例 1.  查询与“刘晨”在同一 ...

  2. Oracle 实验四-七

    shutdown immediateORA-01097: 无法在事务处理过程中关闭 - 请首先提交或回退 解决:先 "commit" 实验四 SQL Production :: C ...

  3. 在mysql数据库中创建oracle scott用户的四个表及插入初始化数据

    在mysql数据库中创建oracle scott用户的四个表及插入初始化数据 /* 功能:创建 scott 数据库中的 dept 表 */ create table dept( deptno int ...

  4. [转帖]如何获得一个RAC Oracle数据库(从Github - oracle/docker-images) - 本地版 ---暂时未做实验.

    如何获得一个RAC Oracle数据库(从Github - oracle/docker-images) - 本地版 2019-11-09 16:35:30 dingdingfish 阅读数 32更多 ...

  5. MYSQL数据库迁移到ORACLE数据库

    一.环境和需求1.环境 MySQL数据库服务器: OS version:Linux 5.3 for 64 bit mysql Server version: 5.0.45 Oracle数据库服务器: ...

  6. 20169205 2016-2017-2 实验四 SQL注入实验

    20169205 2016-2017-2 实验四 SQL注入实验 实验介绍 SQL注入技术是利用web应用程序和数据库服务器之间的接口来篡改网站内容的攻击技术.通过把SQL命令插入到Web表单提交框. ...

  7. 数据库操作事物的四大特性以及MySQL数据库的四种隔离级别

    1 .事物操作数据库的四大特性(ACID) 1.原子性 (Atomicity) 原子性:就是事物的所包含的所有操作,要么全部成功,要么全部失败回滚. 2.一致性 (Consistency) 一致性:简 ...

  8. [转帖]如何获得一个Oracle RAC数据库(从Github - oracle/vagrant-boxes) --- 暂时未测试成功 公司网络太差了..

    如何获得一个Oracle RAC数据库(从Github - oracle/vagrant-boxes) 2019-11-20 16:40:36 dingdingfish 阅读数 5更多 分类专栏: 如 ...

  9. 2018-2019-2 20175307 实验四《Android程序设计》实验报告

    任务一 实验要求和内容: Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)>第二十 ...

随机推荐

  1. 代码的坏味道(20)——过度耦合的消息链(Message Chains)

    坏味道--过度耦合的消息链(Message Chains) 特征 消息链的形式类似于:obj.getA().getB().getC(). 问题原因 如果你看到用户向一个对象请求另一个对象,然后再向后者 ...

  2. java8中lambda表达式的应用,以及一些泛型相关

    语法部分就不写了,我们直接抛出一个实际问题,看看java8的这些新特性究竟能给我们带来哪些便利 顺带用到一些泛型编程,一切都是为了简化代码 场景: 一个数据类,用于记录职工信息 public clas ...

  3. 数据库 DML、DDL、DCL区别 .

    总体解释: DML(data manipulation language): 它们是SELECT.UPDATE.INSERT.DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的 ...

  4. Linux下部署ASP.NET服务连接oracle遇到的问题记录

    一.如何卸载MONO Q:mono是linux系统上跨平台软件,卸载它有两种方式: 1.知道mono安装路径,安装原来的路径直接覆盖安装(最为简单): 2.不知道mono安装路径,首先通过sudo f ...

  5. Mono 4.0 Mac上运行asp.net mvc 5.2.3

    Mono 4.0 已经发布,二进制包已经准备好,具体的发布说明参见:http://www.mono-project.com/docs/about-mono/releases/4.0.0/. 今天在Ma ...

  6. GO 基础(一)

    Go语言基础工程目录如下(采用LiteIDE): 备注:需要提前设置GOPATH,即工作目录,bin.pkg.src为默认的GO工程目录结构.GOPATH可以支持多个,在windows下配置在环境变量 ...

  7. AngularJS 第四天----控制器

    控制器的作用 今天和大家学习AngularJS中控制器方面的知识,本文会给出一些例子来说明如何使用AngularJS的控制器.在开始我们的例子之前,首先说说AngularJS控制器的作用.简单的来说A ...

  8. Windows 10 安装SVN 不显示状态图标--解决方法

    升级win10以后,什么都正常,就是svn版本库图标不见了,图标的显示有助于我们定位代码的修改及提交情况,该怎么办呢? 下面分享详细的解决办法亲测有用: 其实也比较简单, 在注册表中找到此项: HKE ...

  9. idea报错:error java compilation failed internal java compiler error

    idea下面报如下问题 error java compilation failed internal java compiler error 解决办法:Setting->Compiler-> ...

  10. 安卓与IOS移动段浏览器视频与音频的问题与总结

    1. 安卓.苹果移动浏览器上都不支持html5的视频与音频自动播放 2. 安卓.苹果移动浏览器要支持播放,前提是必须是用户触发的事件 3. 针对这个特殊的问题,代码需要在用户进来第一次屏幕触发中,去创 ...