(1)实验目的

掌握Oracle中系统权限和对象权限的概念,能熟练进行用户权限的授予与回收;理解角色的基本概念,能熟练使用角色进行权限的授予与回收。掌握数据库对象如触发器、存储过程和函数的定义和使用。掌握ORACLE数据库系统逻辑备份和恢复的方法。

(2)实验要求

熟悉实验室实验环境,阅读实验预备知识,掌握本实验内容涉及知识点的基本用法,了解实验中故障排除的基本方法。实验中根据实验步骤要求,写出相应的代码运行,分析代码书写是否正确,根据步骤要求独立完成实验报告。

(3)实验环境

Oracle 11g,windows 10;

(4)实验内容和步骤

(此处需要填写内容和步骤)

实验内容第一部分(无需截图)

  1. 用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权限没有被回收

实验内容第二部分(无需截图)

  1. 编写带有一个输入参数和一个输出参数的存储过程,输入参数的类型与教师的编号类型相同,输出参数的类型与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;

  1. 编写代码测试存储过程(若无信息输出,请在代码前面加上set serveroutput on;);

set serveroutput on;

declare

x tm.workdays%type;

begin

findteacherworkdays('t001',x);

dbms_output.put_line('编号为t001老师的总工作时长:'||x);

end;

  1. 编写一个函数,计算某个教师负责的经费总数;

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;

  1. 编写代码测试函数;

select tno,sumFUND(tno) from teacher;

  1. 编写一个行级前触发器,当插入、修改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;

  1. 编写代码测试触发器是否工作正常;

update teacher set tsalary=9000 where tno='t001';

insert into teacher(tno,dno,tname,tsex,tsalary,tbirthday) values('t009','d001','陈陈陈','男',9000,'17-10月-1985')

  1. 删除实验中建立的存储过程;

drop procedure findteacherworkdays;

  1. 删除实验中建立的函数;

drop function sumfund;

  1. 删除实验中建立的触发器;

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/DBLESSON@127.0.0.1:1521/orcl TABLES=(TEACHER,TM,MYPROJECT) FILE=D:\DBLESSON.DMP

如果Oracle SID为XE,则用以下语句,后同。

EXP USERID=DBLESSON/DBLESSON@127.0.0.1:1521/XE TABLES=(TEACHER,TM,MYPROJECT) FILE=D:\DBLESSON.DMP

5.在CMD下执行命令“SQLPLUS DBLESSON/DBLESSON@127.0.0.1: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)实验内容和步骤

(此处需要填写内容和步骤)

实验内容第一部分(无需截图)

  1. 用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权限没有被回收

实验内容第二部分(无需截图)

  1. 编写带有一个输入参数和一个输出参数的存储过程,输入参数的类型与教师的编号类型相同,输出参数的类型与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;

  1. 编写代码测试存储过程(若无信息输出,请在代码前面加上set serveroutput on;);

set serveroutput on;

declare

x tm.workdays%type;

begin

findteacherworkdays('t001',x);

dbms_output.put_line('编号为t001老师的总工作时长:'||x);

end;

  1. 编写一个函数,计算某个教师负责的经费总数;

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;

  1. 编写代码测试函数;

select tno,sumFUND(tno) from teacher;

  1. 编写一个行级前触发器,当插入、修改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;

  1. 编写代码测试触发器是否工作正常;

update teacher set tsalary=9000 where tno='t001';

insert into teacher(tno,dno,tname,tsex,tsalary,tbirthday) values('t009','d001','陈陈陈','男',9000,'17-10月-1985')

  1. 删除实验中建立的存储过程;

drop procedure findteacherworkdays;

  1. 删除实验中建立的函数;

drop function sumfund;

  1. 删除实验中建立的触发器;

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/DBLESSON@127.0.0.1:1521/orcl TABLES=(TEACHER,TM,MYPROJECT) FILE=D:\DBLESSON.DMP

如果Oracle SID为XE,则用以下语句,后同。

EXP USERID=DBLESSON/DBLESSON@127.0.0.1:1521/XE TABLES=(TEACHER,TM,MYPROJECT) FILE=D:\DBLESSON.DMP

5.在CMD下执行命令“SQLPLUS DBLESSON/DBLESSON@127.0.0.1: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

数据库实验报告2-数据库管理相关推荐

  1. mysql视图 实验报告_数据库实验报告(视图).doc

    数据库实验报告(视图) 实验报告(视图) 课程数据库原理与应用技术日期 2012 年 5月 17日学号实验项目 名 称有关视图的数据库操作姓名一.实验目的 本次试验就是要掌握基本的SQL Server ...

  2. 数据库实验报告【学会使用企业管理器和查询分析器管理工具】

    Hello各位,本系列为数据库实验报告的合集,是我按照<数据库系统概论习题解析与实验指导第5版>中的实验指导写出来的所有报告.这个系列的每一份报告都是我滴原创于是想把自己的劳动成果发出来共 ...

  3. oracle空间数据库实验报告,Oracle数据库实验报告六 PL/SQL基础

    Oracle数据库实验报告六 PL/SQL基础 -by QQC from BTBU [实验目的] PL/SQL的安装网上有很多教程这里就不做赘述了,如果后序需求大的话我再考虑做一期PL/SQL安装使用 ...

  4. 数据库实验报告【太原理工大学】

    数据库实验报告 温馨提示:仅供参考! 目录 数据库实验报告 一.交互式 SQL 语句的使用 1.数据定义 2.数据操作 3.数据查询操作 二.用户鉴别与数据控制 1.使用 SSMS 的图形界面创建用户 ...

  5. access计算机实验报告,Access数据库实验报告

    Access数据库实验报告 <数据库及其应用> (课程编号:B0901000) 实验报告 (2013-2014学年第2学期) 实验成绩: 学 号: 姓 名: 专业班级: 课 堂 号: 任课 ...

  6. mysql实验报告2_数据库实验报告二

    <数据库实验报告二>由会员分享,可在线阅读,更多相关<数据库实验报告二(24页珍藏版)>请在人人文库网上搜索. 1.XIAN TECHNOLOGICAL UNIVERSITY ...

  7. oracle实验六杨艳华_工作报告之oracle数据库实验报告

    oracle 数据库实验报告 [篇一:大型数据库 oracle 10g 实验教程实验五实验报 告] 集美大学计算机工程学院实验报告 课程名称: oracle 10g 数据库基础教程 指导教师:杨艳华 ...

  8. mysql实验索引和视图_数据库实验报告 索引和视图

    数据库实验报告 索引和视图 (9页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 1西北师范大学计算机科学与工程学院学生实验报告西北师范大 ...

  9. mysql的安全性实验报告_数据库实验报告3-SQL Server 安全性验证

    数据库实验报告 JNU本科实验报告专用纸 课程名称 数据库上机实验 成绩评定 实验项目名称 SQL Server 安全性验证 指导教师 实验项目编号 08060113 实验项目类型 验证性 实验地点 ...

  10. 北邮数据库实验7mysql_北邮大三下第7次数据库实验报告--mysql

    实验七数据库的事务创建与运行实验一.实验内容 1.定义三种模式的数据库事务 2.察看事务的隔离级别 二.实验要求 1.用SQL语句完成以上操作 2.要求学生独立完成以上内容. 3.实验完成后完成要求的 ...

最新文章

  1. zabbix安装配置详解(一)
  2. power linux 安装系统,powershell 安装服务器
  3. mysql数据库水平分割_数据库的水平分割和垂直分割
  4. Inline函数使用注意事项
  5. 古人把月球叫做广寒宫,古人是怎么知道月球上很冷的?一起来看看
  6. XML与HTML的作用不同
  7. html 空格占位符_HTML常用英文单词,快来背单词吧
  8. 类对象等式括号的意义
  9. 【AI视野·今日CV 计算机视觉论文速览 第224期】Tue, 22 Jun 2021
  10. matlab 图像傅里叶逆变换,用MATLAB实现图像的傅里叶变换.ppt
  11. python雷达图的相似度_Python可视化:matplotlib 制作雷达图进行对比分析
  12. C语言中的EOF是什么?
  13. cisco链路聚合 不均衡_思科CISCO交换机间链路聚合端口聚合实现方法详解
  14. 【贝叶斯神经网络训练】(torch实现)
  15. vue通过发送手机号码短信验证登录
  16. MOOC 念整数(C语言)
  17. 创业团队 磨合 团队稳定 团队成员
  18. 谈谈对“周日焦虑症”的看法
  19. 车辆视频检测器检测参数配置
  20. 软件AutoID Network Navigator设置基恩士扫码枪的使用教程

热门文章

  1. 项目中中文大写金额的工具类
  2. C++编程--原子变量
  3. Unity学习 — Unity与LeanCloud数据存储
  4. 子不语IPO下限定价:预计2022年全年净利润下滑,华丙如为实控人
  5. 新手站长应该如何开始写文章?
  6. Meteinfo结合Arcgis制作风矢量图
  7. speech contest
  8. Oracle 给某列前后添加后缀或者前缀
  9. 百度快照劫持,百度快照劫持解决方法!
  10. 4.UWB代码讲解注释