数据库实验报告2 |
您所在的位置:网站首页 › 原型链的应用实验报告 › 数据库实验报告2 |
(1)实验目的 掌握Oracle中系统权限和对象权限的概念,能熟练进行用户权限的授予与回收;理解角色的基本概念,能熟练使用角色进行权限的授予与回收。掌握数据库对象如触发器、存储过程和函数的定义和使用。掌握ORACLE数据库系统逻辑备份和恢复的方法。 (2)实验要求 熟悉实验室实验环境,阅读实验预备知识,掌握本实验内容涉及知识点的基本用法,了解实验中故障排除的基本方法。实验中根据实验步骤要求,写出相应的代码运行,分析代码书写是否正确,根据步骤要求独立完成实验报告。 (3)实验环境 Oracle 11g,windows 10; (4)实验内容和步骤 (此处需要填写内容和步骤) 实验内容第一部分(无需截图) 用SYSTEM账户登录数据库,创建用户A、B、C,密码分别为A、B、C;create user A identified by A; create user B identified by B; create user C identified by C; 2.使用SYSTEM账户连接到数据库,并执行如下命令; --把系统权限CREATE SESSION和CREATE TABLE授予用户A并允许A传递权限; --注:ORACLE系统权限授予的可选项WITH ADMIN OPTION表示得到权限的用户可以管理得到的系统权限,包括传递权限; GRANT CREATE SESSION, CREATE TABLE TO A WITH ADMIN OPTION; --修改用户A的默认表空间为USERS,使用户A能在STUDENT中插入数据; ALTER USER A DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS; Grant create session,create table to A with admin option; alter user A default tablespace users quota unlimited on users; 3.用户A连接登录数据库,创建关系模式student(sno,sname,sage)(自定义属性的数据类型),用户A向表student插入数据(插入内容自定义),并执行commit提交数据; create table student ( sno char(9) primary key, sname char(20) unique, sage smallint ); insert into student(sno,sname,sage) values('200610002','小陈',18); insert into student(sno,sname,sage) values('200610003','小红',19); insert into student(sno,sname,sage) values('200610004','小白',18); commit; 4.用户A完成以下任务; --(1)把CREATE SESSION权限授予给B(授权时使用WITH ADMIN OPTION); --(2)把STUDENT表的SELECT和INSERT权限授予给B,并允许B传递获得的权限(对象权限采用的选项是WITH GRANT OPTION) grant create session to B with admin option; grant select,insert on student to B with grant option; 5.用户B连接登录数据库,测试用户B对表student表的select和Insert权限(用户B获得student表的权限后,访问student表必须使用A.student); select * from A.student; insert into A.student(sno,sname,sage) values('20061005','小黄',19); 6.用户B把CREATE SESSION、对表A.student的select权限授予给用户C; grant create session to C; grant select on A.student to C; 7.用户C登录数据库,测试用户C对表A.student表是否有select和Insert权限; select * from A.student; insert into student(sno,sname,sage) values('200610006','小黑',20); 没有insert权限,插入失败 8.用户A把student的属性sname、sage的修改权限授予用户B; grant update(sname,sage) on student to B; 9.用户A收回用户B对student表的select权限,测试用户B、C是否仍然具有对student表的select权限; revoke select on student from B; 10.用户A回收用户B的CREATE SESSION权限,测试用户B、C是否仍然可以连接登录到数据库; revoke create session from B; B不可以,C可以 11.由系统管理员SYS或SYSTEM授予用户A创建角色的权限; grant create role to A with admin option; 12.用户A创建角色MyRole,授予角色MyRole对表Student的select权限以及CREATE SESSION权限; create role Myrole; grant create session to Myrole; 13.用户A把角色MyRole授予给用户B,并允许用户B对角色进行管理,测试用户B获取的权限(授予的角色权限在用户下次登陆才生效); grant select on student to Myrole; 14.用户B把角色MyRole授予给用户C,测试用户C是否具有对Student表的select权限; select * from A.student; C对student表有select权限 15.用户A回收用户B的MyRole角色权限,测试B、C拥有的对Student表的select权限是否已经回收(角色权限回收并不影响当前已建立连接的用户,用户在下次登陆才失效); grant Myrole to B with admin option; revoke Myrole from B; B对student表的select权限已经回收,但C对student表的select权限没有被回收 实验内容第二部分(无需截图) 编写带有一个输入参数和一个输出参数的存储过程,输入参数的类型与教师的编号类型相同,输出参数的类型与tm表的workdays类型相同,存储过程的功能是,根据输入参数教工号的值,计算出该教师为其参与的所有项目的工作总天数;create or replace procedure findTeacherWorkDays (v_tno in teacher.tno%type,v_workdays out tm.workdays%type) as begin select sum(tm.workdays) into v_workdays from teacher,tm where teacher.tno=tm.tno and teacher.tno=v_tno; end; 编写代码测试存储过程(若无信息输出,请在代码前面加上set serveroutput on;);set serveroutput on; declare x tm.workdays%type; begin findteacherworkdays('t001',x); dbms_output.put_line('编号为t001老师的总工作时长:'||x); end; 编写一个函数,计算某个教师负责的经费总数;create or replace function sumFUND(c_tno in teacher.tno%type) return number as c_fund myproject.pfund%type; begin select sum(pfund) into c_fund from myproject where tno=c_tno; if(c_fund is null) then c_fund:=0; end if; return c_fund; end; 编写代码测试函数;select tno,sumFUND(tno) from teacher; 编写一个行级前触发器,当插入、修改Teacher表中教师的工资时,如果工资高于8000,则把工资改为8000;
create or replace trigger modifySalary before insert or update of tsalary on teacher for each row when(new.tsalary>8000) begin :new.tsalary:=8000; end; 编写代码测试触发器是否工作正常;update teacher set tsalary=9000 where tno='t001'; insert into teacher(tno,dno,tname,tsex,tsalary,tbirthday) values('t009','d001','陈陈陈','男',9000,'17-10月-1985') 删除实验中建立的存储过程;drop procedure findteacherworkdays; 删除实验中建立的函数;drop function sumfund; 删除实验中建立的触发器;drop trigger modifysalary; 实验内容第三部分(需要截图) 1.用SYSTEM用户创建数据库用户DBLESSON,并授予RESOURCE,CONNECT角色权限; CREATE USER DBLESSON IDENTIFIED BY DBLESSON; GRANT RESOURCE,CONNECT TO DBLESSON; 2.利用附录中SQL语句(可在QQ共享文件夹中下载),建立项目信息管理数据库;
3.从开始菜单启动CMD,然后执行以下命令; 执行EXP HELP=Y,查看EXP帮助文档,了解各个参数的作用。 执行IMP HELP=Y,查看IMP帮助文档,了解各个参数的作用。 4.在CMD下执行以下命令,导出数据到文件D:\DBLESSON.DMP; 用DBLESSON用户导出DBLESSON的TEACHER、TM、MYPROJECT表(注意,如果安装的是Oracle Express版,默认SID是XE,请把ORCL改为XE,此外,密码区分大小写,后同); EXP USERID=DBLESSON/DBLESSON@ORCL TABLES=(TEACHER,TM,MYPROJECT) FILE=D:\DBLESSON.DMP 注:如果网络服务名配置有误,则采用下面的命令(即网络服务名用“IP地址:端口号/SID”代替),后同。 EXP USERID=DBLESSON/[email protected]:1521/orcl TABLES=(TEACHER,TM,MYPROJECT) FILE=D:\DBLESSON.DMP 如果Oracle SID为XE,则用以下语句,后同。 EXP USERID=DBLESSON/[email protected]:1521/XE TABLES=(TEACHER,TM,MYPROJECT) FILE=D:\DBLESSON.DMP 5.在CMD下执行命令“SQLPLUS DBLESSON/[email protected]:1521/ORCL”进入SQLPLUS环境下,然后删除表格TM; DROP TABLE TM; 注:如果安装的是Oracle Express版,请把ORCL改为XE;如果SQLPLUS不可用,可以使用SQL Developer建立连接删除TM表,后同。 SQLPLUS不可用 6.在CMD下执行以下命令,用D:\DBLESSON.DMP还原数据库中的TM表; --用D:\DBLESSON.DMP还原数据库中的TM表,并查看结果; IMP USERID=DBLESSON/DBLESSON@ORCL FILE=D:\DBLESSON.DMP TABLES=(TM) IGNORE=Y 注:如果网络服务名配置有误,请参照第4步,后同。 还原TM表 在SQL Developer上查看TM表是否还原 7.在CMD下执行以下命令,用DBLESSON导出方案DBLESSON; EXP USERID=DBLESSON/DBLESSON@ORCL OWNER=DBLESSON FILE=D:\SCHEMA.DMP 8.在SQLPLUS环境下,用户DBLESSON删除DBLESSON方案下的所有表、视图等对象; DROP TABLE TEACHER; DROP TABLE MYPROJECT; DROP TABLE DEPARTMENT; 9.在CMD下执行以下IMP恢复命令并查看恢复后的结果; IMP USERID=DBLESSON/DBLESSON FROMUSER=DBLESSON TOUSER=DBLESSON FILE=D:\SCHEMA.DMP 10.在CMD下,用SYSTEM用户导出整个数据库; EXP USERID=SYSTEM/ORACLE FILE=D:\DB.DMP FULL=Y 11.在SQLPLUS环境下,用SYSTEM用户删除DBLESSON用户,重建一个用户DB1并授予RESOURCE、CONNECT角色权限; CREATE USER DB1 IDENFIFIED BY DB1; GRANT RESOURCE,CONNECT TO DB1; 12.在CMD下执行以下命令,把导出的数据导入到用户DB1; IMP USERID=SYSTEM/ORACLE FROMUSER=DBLESSON TOUSER=DB1 FILE=D:\DB.DMP (1)实验目的 掌握Oracle中系统权限和对象权限的概念,能熟练进行用户权限的授予与回收;理解角色的基本概念,能熟练使用角色进行权限的授予与回收。掌握数据库对象如触发器、存储过程和函数的定义和使用。掌握ORACLE数据库系统逻辑备份和恢复的方法。 (2)实验要求 熟悉实验室实验环境,阅读实验预备知识,掌握本实验内容涉及知识点的基本用法,了解实验中故障排除的基本方法。实验中根据实验步骤要求,写出相应的代码运行,分析代码书写是否正确,根据步骤要求独立完成实验报告。 (3)实验环境 Oracle 11g,windows 10; (4)实验内容和步骤 (此处需要填写内容和步骤) 实验内容第一部分(无需截图) 用SYSTEM账户登录数据库,创建用户A、B、C,密码分别为A、B、C;create user A identified by A; create user B identified by B; create user C identified by C; 2.使用SYSTEM账户连接到数据库,并执行如下命令; --把系统权限CREATE SESSION和CREATE TABLE授予用户A并允许A传递权限; --注:ORACLE系统权限授予的可选项WITH ADMIN OPTION表示得到权限的用户可以管理得到的系统权限,包括传递权限; GRANT CREATE SESSION, CREATE TABLE TO A WITH ADMIN OPTION; --修改用户A的默认表空间为USERS,使用户A能在STUDENT中插入数据; ALTER USER A DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS; Grant create session,create table to A with admin option; alter user A default tablespace users quota unlimited on users; 3.用户A连接登录数据库,创建关系模式student(sno,sname,sage)(自定义属性的数据类型),用户A向表student插入数据(插入内容自定义),并执行commit提交数据; create table student ( sno char(9) primary key, sname char(20) unique, sage smallint ); insert into student(sno,sname,sage) values('200610002','小陈',18); insert into student(sno,sname,sage) values('200610003','小红',19); insert into student(sno,sname,sage) values('200610004','小白',18); commit; 4.用户A完成以下任务; --(1)把CREATE SESSION权限授予给B(授权时使用WITH ADMIN OPTION); --(2)把STUDENT表的SELECT和INSERT权限授予给B,并允许B传递获得的权限(对象权限采用的选项是WITH GRANT OPTION) grant create session to B with admin option; grant select,insert on student to B with grant option; 5.用户B连接登录数据库,测试用户B对表student表的select和Insert权限(用户B获得student表的权限后,访问student表必须使用A.student); select * from A.student; insert into A.student(sno,sname,sage) values('20061005','小黄',19); 6.用户B把CREATE SESSION、对表A.student的select权限授予给用户C; grant create session to C; grant select on A.student to C; 7.用户C登录数据库,测试用户C对表A.student表是否有select和Insert权限; select * from A.student; insert into student(sno,sname,sage) values('200610006','小黑',20); 没有insert权限,插入失败 8.用户A把student的属性sname、sage的修改权限授予用户B; grant update(sname,sage) on student to B; 9.用户A收回用户B对student表的select权限,测试用户B、C是否仍然具有对student表的select权限; revoke select on student from B; 10.用户A回收用户B的CREATE SESSION权限,测试用户B、C是否仍然可以连接登录到数据库; revoke create session from B; B不可以,C可以 11.由系统管理员SYS或SYSTEM授予用户A创建角色的权限; grant create role to A with admin option; 12.用户A创建角色MyRole,授予角色MyRole对表Student的select权限以及CREATE SESSION权限; create role Myrole; grant create session to Myrole; 13.用户A把角色MyRole授予给用户B,并允许用户B对角色进行管理,测试用户B获取的权限(授予的角色权限在用户下次登陆才生效); grant select on student to Myrole; 14.用户B把角色MyRole授予给用户C,测试用户C是否具有对Student表的select权限; select * from A.student; C对student表有select权限 15.用户A回收用户B的MyRole角色权限,测试B、C拥有的对Student表的select权限是否已经回收(角色权限回收并不影响当前已建立连接的用户,用户在下次登陆才失效); grant Myrole to B with admin option; revoke Myrole from B; B对student表的select权限已经回收,但C对student表的select权限没有被回收 实验内容第二部分(无需截图) 编写带有一个输入参数和一个输出参数的存储过程,输入参数的类型与教师的编号类型相同,输出参数的类型与tm表的workdays类型相同,存储过程的功能是,根据输入参数教工号的值,计算出该教师为其参与的所有项目的工作总天数;create or replace procedure findTeacherWorkDays (v_tno in teacher.tno%type,v_workdays out tm.workdays%type) as begin select sum(tm.workdays) into v_workdays from teacher,tm where teacher.tno=tm.tno and teacher.tno=v_tno; end; 编写代码测试存储过程(若无信息输出,请在代码前面加上set serveroutput on;);set serveroutput on; declare x tm.workdays%type; begin findteacherworkdays('t001',x); dbms_output.put_line('编号为t001老师的总工作时长:'||x); end; 编写一个函数,计算某个教师负责的经费总数;create or replace function sumFUND(c_tno in teacher.tno%type) return number as c_fund myproject.pfund%type; begin select sum(pfund) into c_fund from myproject where tno=c_tno; if(c_fund is null) then c_fund:=0; end if; return c_fund; end; 编写代码测试函数;select tno,sumFUND(tno) from teacher; 编写一个行级前触发器,当插入、修改Teacher表中教师的工资时,如果工资高于8000,则把工资改为8000;
create or replace trigger modifySalary before insert or update of tsalary on teacher for each row when(new.tsalary>8000) begin :new.tsalary:=8000; end; 编写代码测试触发器是否工作正常;update teacher set tsalary=9000 where tno='t001'; insert into teacher(tno,dno,tname,tsex,tsalary,tbirthday) values('t009','d001','陈陈陈','男',9000,'17-10月-1985') 删除实验中建立的存储过程;drop procedure findteacherworkdays; 删除实验中建立的函数;drop function sumfund; 删除实验中建立的触发器;drop trigger modifysalary; 实验内容第三部分(需要截图) 1.用SYSTEM用户创建数据库用户DBLESSON,并授予RESOURCE,CONNECT角色权限; CREATE USER DBLESSON IDENTIFIED BY DBLESSON; GRANT RESOURCE,CONNECT TO DBLESSON; 2.利用附录中SQL语句(可在QQ共享文件夹中下载),建立项目信息管理数据库;
3.从开始菜单启动CMD,然后执行以下命令; 执行EXP HELP=Y,查看EXP帮助文档,了解各个参数的作用。 执行IMP HELP=Y,查看IMP帮助文档,了解各个参数的作用。 4.在CMD下执行以下命令,导出数据到文件D:\DBLESSON.DMP; 用DBLESSON用户导出DBLESSON的TEACHER、TM、MYPROJECT表(注意,如果安装的是Oracle Express版,默认SID是XE,请把ORCL改为XE,此外,密码区分大小写,后同); EXP USERID=DBLESSON/DBLESSON@ORCL TABLES=(TEACHER,TM,MYPROJECT) FILE=D:\DBLESSON.DMP 注:如果网络服务名配置有误,则采用下面的命令(即网络服务名用“IP地址:端口号/SID”代替),后同。 EXP USERID=DBLESSON/[email protected]:1521/orcl TABLES=(TEACHER,TM,MYPROJECT) FILE=D:\DBLESSON.DMP 如果Oracle SID为XE,则用以下语句,后同。 EXP USERID=DBLESSON/[email protected]:1521/XE TABLES=(TEACHER,TM,MYPROJECT) FILE=D:\DBLESSON.DMP 5.在CMD下执行命令“SQLPLUS DBLESSON/[email protected]:1521/ORCL”进入SQLPLUS环境下,然后删除表格TM; DROP TABLE TM; 注:如果安装的是Oracle Express版,请把ORCL改为XE;如果SQLPLUS不可用,可以使用SQL Developer建立连接删除TM表,后同。 SQLPLUS不可用 6.在CMD下执行以下命令,用D:\DBLESSON.DMP还原数据库中的TM表; --用D:\DBLESSON.DMP还原数据库中的TM表,并查看结果; IMP USERID=DBLESSON/DBLESSON@ORCL FILE=D:\DBLESSON.DMP TABLES=(TM) IGNORE=Y 注:如果网络服务名配置有误,请参照第4步,后同。 还原TM表 在SQL Developer上查看TM表是否还原 7.在CMD下执行以下命令,用DBLESSON导出方案DBLESSON; EXP USERID=DBLESSON/DBLESSON@ORCL OWNER=DBLESSON FILE=D:\SCHEMA.DMP 8.在SQLPLUS环境下,用户DBLESSON删除DBLESSON方案下的所有表、视图等对象; DROP TABLE TEACHER; DROP TABLE MYPROJECT; DROP TABLE DEPARTMENT; 9.在CMD下执行以下IMP恢复命令并查看恢复后的结果; IMP USERID=DBLESSON/DBLESSON FROMUSER=DBLESSON TOUSER=DBLESSON FILE=D:\SCHEMA.DMP 10.在CMD下,用SYSTEM用户导出整个数据库; EXP USERID=SYSTEM/ORACLE FILE=D:\DB.DMP FULL=Y 11.在SQLPLUS环境下,用SYSTEM用户删除DBLESSON用户,重建一个用户DB1并授予RESOURCE、CONNECT角色权限; CREATE USER DB1 IDENFIFIED BY DB1; GRANT RESOURCE,CONNECT TO DB1; 12.在CMD下执行以下命令,把导出的数据导入到用户DB1; IMP USERID=SYSTEM/ORACLE FROMUSER=DBLESSON TOUSER=DB1 FILE=D:\DB.DMP |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |