大理大学
课程名称:医学数据库管理技术学 院:专 业:生物医学工程年 级:姓 名:王绍帆学指导教师:赵春文
实验报告
工程学院
2013 班 级: 1 号: 2013166132
2015年 12月 20 日 大理大学教务处制
实验报告要求
实验报告内容原则上应包括以下几个内容: 1. 实验课程名称 2. 实验项目名称 3. 实验目的和要求 4. 主要仪器设备 5. 实验原理和内容
6. 主要的操作方法与实验步骤 7. 实验数据记录和处理 8. 实验结果与分析 9. 思考题
注:不同类型的实验课程对实验报告可有不同的要求,各个学科的实验报告可以根据自己的学科特点对以上内容作适当调整。
实验名称: 数据库创建 时间:2015-11-19 地点:三教学楼205机房 班组:A 教师评语 成绩 实验报告 1 实验目的 教师签名 1. 熟悉数据库的交互式SQL工具。 2. 熟悉通过SQL进行创建数据库模式、数据库表的操作。 2 实验工具KingbaseES 利用KingbaseES及其交互式查询工具ISQLW来熟悉SQL。 3 实验内容和要求 1. 在KingbaseES中建立P70页习题6数据库,并完成课本P70页习题6所要求的各种操作,所有的SQL操作均在此建立的新库里进行。 2. 根据以下要求认真填写实验报告,记录所有的实验用例。 4 实验方法及步骤 1.用SQL语言建立S,P,J,SPJ表 /*定义基本表S*/ CREATE TABLE S (SNO CHAR(9)PRIMARY KEY, SNAME CHAR(25) UNIQUE, STATUS SMALLINT, CITY CHAR(20) ); /*定义基本表P*/
CREATE TABLE P (PNO CHAR(9)PRIMARY KEY, PNAME CHAR(25), COLOR CHAR(10), WEIGHT SMALLINT ); /*定义基本表J*/ CREATE TABLE J (JNO CHAR(9)PRIMARY KEY, JNAME CHAR(35), CITY CHAR(20) ); /*定义基本表SPJ*/ CREATE TABLE SPJ (SNO CHAR(9), PNO CHAR(9), JNO CHAR(9), QTY CHAR(9), PRIMARY KEY(SNO,PNO,JNO), FOREIGN KEY(SNO)REFERENCES S(SNO), FOREIGN KEY(PNO)REFERENCES P(PNO), FOREIGN KEY(JNO)REFERENCES J(JNO) ); /*在S表中插入数据*/ INSERT INTO S(SNO,SNAME,STATUS,CITY) VALUES('S1','精益','20','天津'); INSERT INTO S(SNO,SNAME,STATUS,CITY) VALUES('S2','盛锡','10','北京'); INSERT INTO S(SNO,SNAME,STATUS,CITY) VALUES('S3','东方红','30','北京'); INSERT INTO S(SNO,SNAME,STATUS,CITY) VALUES('S4','丰泰盛','20','天津'); INSERT INTO S(SNO,SNAME,STATUS,CITY) VALUES('S5','为民','30','上海'); /*在P表中插入数据*/ INSERT INTO P(PNO,PNAME,COLOR,WEIGHT) VALUES('P1','螺母','红','12'); INSERT INTO P(PNO,PNAME,COLOR,WEIGHT) VALUES('P2','螺栓','绿','17'); INSERT INTO P(PNO,PNAME,COLOR,WEIGHT) VALUES('P3','螺丝刀','蓝','14'); INSERT INTO P(PNO,PNAME,COLOR,WEIGHT) VALUES('P4','螺丝刀','红','14'); INSERT INTO P(PNO,PNAME,COLOR,WEIGHT) VALUES('P5','凸轮','蓝','40'); INSERT INTO P(PNO,PNAME,COLOR,WEIGHT) VALUES('P6','齿轮','红','30'); /*在J表中插入数据*/ INSERT INTO J(JNO,JNAME,CITY) VALUES('J1','三建','北京'); INSERT INTO J(JNO,JNAME,CITY) VALUES('J2','一汽','长春'); INSERT INTO J(JNO,JNAME,CITY) VALUES('J3','弹簧厂','天津'); INSERT INTO J(JNO,JNAME,CITY) VALUES('J4','造船厂','天津'); INSERT INTO J(JNO,JNAME,CITY) VALUES('J5','机车厂','唐山'); INSERT INTO J(JNO,JNAME,CITY) VALUES('J6','无线电厂','常州'); INSERT INTO J(JNO,JNAME,CITY) VALUES('J7','半导体厂','南京'); /*在SPJ表中插入数据*/ INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S1','P1','J1','200'); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S1','P1','J3','100');
INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S1','P1','J4','700'); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S1','P2','J2','100'); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S2','P3','J1','400'); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S2','P3','J2','200'); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S2','P3','J4','500'); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S2','P3','J5','400'); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S2','P5','J1','400'); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S2','P15','J2','100'); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S3','P1','J1','200'); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S3','P3','J1','200'); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S4','P5','J1','100'); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S4','P6','J3','300'); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S4','P6','J4','200'); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S5','P2','J4','100'); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S5','P3','J1','200'); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S5','P6','J2','200'); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S5','P6','J4','500'); 2.显示建立好的表 (1)查询命令: SELECT* FROM S; 查询结果: (2)查询命令: SELECT* FROM P; 查询结果: (3)查询命令: SELECT* FROM J; 查询结果:
(4)查询命令: SELECT* FROM SPJ; 查询结果: 3.执行习题6所要求的操作 (1)求供应工程J1零件的供应商号码 查询命令: SELECT DISTINCT SNO FROM SPJ WHERE JNO='J1' 查询结果: (2)求供应工程J1零件P1的供应商号码SNO 查询命令: SELECT SNO FROM SPJ WHERE JNO='J1' AND PNO='P1'; 查询结果: (3)求供应工程J1零件为红色的供应商号码SNO 查询命令: SELECT SPJ.SNO FROM SPJ,P WHERE SPJ.PNO=P.PNO AND SPJ.JNO='J1' AND P.COLOR='红'; 查询结果:
(4) 求没有使用天津供应商生产的红色零件的工程号JNO 查询命令: SELECT SPJ.JNO FROM SPJ,S,P WHERE S.SNO=SPJ.SNO AND SPJ.PNO=P.PNO AND S.CITY!='天津' AND P.COLOR='红'; 查询结果: (5)求至少用了供应商S1所供应的全部零件的工程号JNO。 1.先找出供应商S1供应的零件 查询命令: SELECT DISTINCT PNO FROM SPJ WHERE SNO='S1' 查询结果: 2.再找既用零件P1又用零件P2的工程号JNO。 查询命令: SELECT DISTINCT JNO FROM SPJ WHERE PNO='P1' INTERSECT SELECT DISTINCT JNO FROM SPJ WHERE PNO='P2' 查询结果: 5 实验结果及总结 1.因为重复执行了生成表格的语句,所以出现了错误,经过百度,了解到用DROP TABLE S CASCADE语句删除S表。 2.SELECT* FROM S 这是输出s表的全内容,检验输入数据的准确。 3.输入数据的时,字符串常数要用单引号(英文符号)括起来。值与属性列要一一对应。 4.kingbase数据库对命令的格式有较为严格的要求,输入时要具有较高的准确性,不然容易报错。
实验名称: 数据库查询一 时间:2015-11-26 地点:三教学楼205机房 班组:A 教师评语 成绩 实验报告 1 实验目的 1. 熟悉数据库的交互式SQL工具。 2. 熟悉通过SQL对数据库进行单表查询、连接查询的操作。 3. 完成作业的上机练习。 教师签名 2 实验工具KingbaseES 利用KingbaseES及其交互式查询工具ISQLW来熟悉SQL。 3 实验内容和要求 1. 在实验二中建立数据库的基础上,完成课本3.4节例3.15-例3.60的各种查询; 2. 根据以下要求认真填写实验报告,记录所有的实验用例。 3.查询内容见课本 4 实验方法及步骤 例3.16 查询命令: SELECT Sno,Sname FROM \"S-C\".\"STUDENT\"; 查询结果:
例3.17 查询命令: SELECT Sname,Sno,Sdept FROM \"S-C\".\"STUDENT\"; 查询结果: 例3.18 查询命令: SELECT* FROM \"S-C\".\"STUDENT\"; 查询结果: 例3.19 查询命令: SELECT Sname,2014-Sage FROM \"S-C\".\"STUDENT\"; 查询结果: 例3.20 1.查询命令: SELECT Sname,'Year of Birth:',2014-Sage,LOWER(Sdept) FROM \"S-C\".\"STUDENT\" 查询结果: 2.查询命令: SELECT Sname NAME,'Year of Birth:'BIRTH,2014-Sage BIRTHDAY, LOWER(Sdept)DEPARTMENT
FROM \"S-C\".\"STUDENT\"; 查询结果: 例3.21 查询命令: SELECT Sno FROM \"S-C\".\"SC\"; 查询结果: 例3.22 查询命令: SELECT Sname FROM \"S-C\".\"STUDENT\" WHERE Sdept='CS'; 查询结果: 例3.23 查询命令: SELECT Sname,sage FROM \"S-C\".\"STUDENT\" WHERE Sage<20; 查询结果: 例3.24 查询命令: SELECT DISTINCT Sno FROM \"S-C\".\"SC\" WHERE Grade<60; 查询结果: 例3.25 查询命令: SELECT Sname,Sdept,Sage
FROM \"S-C\".\"STUDENT\" WHERE Sage BETWEEN 20 AND 23; 查询结果: 例3.26 查询命令: SELECT Sname,Sdept,Sage FROM \"S-C\".\"STUDENT\" WHERE Sage NOT BETWEEN 20 AND 23; 查询结果: 例3.27 查询命令: SELECT Sname,Ssex WHERE FROM \"S-C\".\"STUDENT\" Sdept IN('CS','MA','IS'); 查询结果: 例3.28 查询命令: SELECT Sname,Ssex FROM \"S-C\".\"STUDENT\" WHERE Sdept NOT IN('CS','MA','IS'); 查询结果: 例3.29 查询命令: SELECT* FROM \"S-C\".\"STUDENT\"; WHERE Sno LIKE '201215121'; 查询结果: 例3.30 查询命令: SELECT Sname,Sno,Ssex FROM \"S-C\".\"STUDENT\";
WHERE Sname LIKE '刘%'; 查询结果: 例3.31 查询命令: SELECT Sname FROM \"S-C\".\"STUDENT\"; WHERE Sname LIKE '欧阳_'; 查询结果: 例3.32 查询命令: SELECT Sname,Sno FROM \"S-C\".\"STUDENT\"; WHERE Sname LIKE '_阳%'; 查询结果: 例3.33 查询命令: SELECT Sname,Sno,Ssex FROM \"S-C\".\"STUDENT\"; WHERE Sname NOT LIKE '刘%'; 查询结果: 例3.34 查询命令: SELECT Cno,Ccredit FROM \"S-C\".\"COURSE\"; WHERE Cname LIKE 'DB\\_Design' ESCAPE '\\'; 查询结果: 例3.35 查询命令: SELECT* FROM \"S-C\".\"COURSE\"; WHERE Cname LIKE 'DB\\_%i_ _' ESCAPE '\\'; 查询结果:
例3.36 查询命令: SELECT Sno,Cno FROM \"S-C\".\"SC\" WHERE Grade IS NULL; 查询结果: 例3.37 查询命令: SELECT Sno,Cno FROM \"S-C\".\"SC\" WHERE Grade IS NOT NULL; 查询结果: 例3.38 查询命令: SELECT Sname FROM \"S-C\".\"STUDENT\"; WHERE Sdept='CS' AND Sage<20; 查询结果: 例3.39 查询命令: SELECT Sno,Grade FROM \"S-C\".\"SC\" WHERE Cno='3' ORDER BY Grade DESC; 查询结果: 例3.40 查询命令: SELECT* FROM \"S-C\". \"STUDENT\"; ORDER BY Sdept,Sage DESC; 查询结果:
例3.41 查询命令: SELECT COUNT(*) FROM \"S-C\".\"STUDENT\"; 查询结果: 例3.42 查询命令: SELECT COUNT(DISTINCT Sno) FROM \"S-C\".\"SC\"; 查询结果: 例3.43 查询命令: SELECT AVG(Grade) FROM \"S-C\".\"SC\"; WHERE Cno='1'; 查询结果: 例3.44 查询命令: SELECT MAX(Grade) FROM \"S-C\".\"SC\"; WHERE Cno='1'; 查询结果: 例3.45 查询命令: SELECT SUM(Ccredit) FROM \"S-C\".\"COURSE\"; WHERE Sno='201215012'AND SC.Cno=COURSE.Cno; 查询结果: 例3.46 查询命令:
SELECT Cno,COUNT(Sno) FROM \"S-C\".SC GROUP BY Cno; 查询结果: 例3.47 查询命令: SELECT Sno FROM \"S-C\".SC; GROUP BY Sno HAVING COUNT(*)>3;; 查询结果: 例3.48 查询命令: SELECT Sno,AVG(Grade) FROM \"S-C\".SC GROUP BY Sno HAVING AVG(Grade)>=90; 查询结果: 例3.49 查询命令: SELECT Student.*,SC.* FROM \"S-C\".Student,\"S-C\".SC; WHERE Student.Sno=SC.Sno; 查询结果: 例3.50 查询命令: SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM \"S-C\".Student,\"S-C\".SC; WHERE Student.Sno=SC.Sno; 查询结果: 例3.51 查询命令:
SELECT Student.Sno,Sname FROM \"S-C\".Student,\"S-C\".SC; WHERE Student.Sno=SC.Sno AND SC.Cno='2'AND SC.Grade>90; 查询结果: 例3.52 查询命令: SELECT FIRST.Cno,SECOND.Cpno FROM \"S-C\".Course FIRST,\"S-C\".Course SECOND WHERE FIRST.Cpno=SECOND.Cno; 查询结果: 例3.53 查询命令: SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM \"S-C\".Student LEFT OUTER JOIN \"S-C\".SC ON(Student.Sno=SC.Sno); 查询结果: 例3.54 查询命令: SELECT Student.Sno,Sname,Cname,Grade FROM \"S-C\".Student,\"S-C\".SC,\"S-C\".Course WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno; 查询结果:
例3.55 1.查询命令: SELECT Sdept FROM \"S-C\".Student WHERE Sname='刘晨'; 查询结果: 2.查询命令: SELECT Sno,Sname,Sdept FROM \"S-C\".Student WHERE Sdept='CS'; 查询结果: 例3.56 查询命令: SELECT Sno,Sname FROM \"S-C\".Student WHERE Sno IN (SELECT Sno
FROM \"S-C\".SC WHERE Cno IN (SELECT Cno FROM \"S-C\".Course WHERE Cname='信息系统' ) ); 查询结果: 例3.57 查询命令: SELECT Sno ,Cno FROM \"S-C\".SC x WHERE Grade>=(SELECT AVG(Grade) FROM \"S-C\".SC y WHERE y.Sno=X.Sno) ; 查询结果: 例3.58 1.查询命令: SELECT Sname,Sage FROM \"S-C\".Student WHERE Sage FROM \"S-C\".Student WHERE Sage 实验名称: 数据库查询二 时间:2015-12-03 地点:三教学楼205机房 班组:A 教师评语 成绩 实验报告 1 实验目的 教师签名 1. 熟悉数据库的交互式SQL工具; 2. 熟悉通过SQL对数据库视图进行操作; 3. 掌握通过SQL插入、更新、删除数据等操作。 2 实验工具KingbaseES 利用KingbaseES及其交互式查询工具ISQLW来熟悉SQL。 3 实验内容和要求 1. 在建立3.2节学生-课程数据库的基础上,完成课本3.5数据更新、3.6视图中的各例题; 2. 根据以下要求认真填写实验报告,记录所有的实验用例。 4 实验方法及步骤 例3.69 查询命令: INSERTINTO \"S-C\".STUDENT(SNO,SNAME,SSEX,SDEPT,SAGE) VALUES('201215128','陈冬','男','IS',18); SELECT \"SNO\FROM \"S-C\".\"STUDENT\"; 查询结果: 例3.70 查询命令: INSERTINTO \"S-C\".STUDENT VALUES('201215126','张成民','男',18,'CS'); SELECT \"SNO\FROM \"S-C\".\"STUDENT\"; 查询结果: 例3.71 查询命令: INSERT INTO \"S-C\".SC(SNO,CNO) VALUES('201215128','1'); SELECT \"学号\课程号\成绩\" FROM \"学生选课\".\"选课\"; 查询结果: 例3.72 查询命令: CREATE TABLE DEPT_AGE ( SDEPT CHAR (15), AVG_AGE SMALLINT); INSERT INTO DEPT_AGE(SDEPT,AVG_AGE) SELECT SDEPT,AVG(SAGE) FROM \"S-C\".STUDENT GROUP BY SDEPT SELECT * FROM DEPT_AGE 查询结果: 例3.73 查询命令: UPDATE \"S-C\".STUDENT SET SAGE=22 WHERE SNO='200215121'; SELECT \"SNO\FROM \"S-C\".\"STUDENT\"; 查询结果: 例3.74 查询命令: UPDATE \"S-C\".STUDENT SET SAGE=SAGE+1; SELECT \"SNO\FROM \"S-C\".\"STUDENT\"; 查询结果: 例3.75 查询命令: UPDATE \"S-C\".SC SET GRADE=0 WHERE SNO IN (SELECT SNO FROM \"S-C\".STUDENT WHERE SDEPT='CS'); SELECT \"SNO\FROM \"S-C\".SC; 查询结果: 例3.76 查询命令: DELETE FROM \"S-C\".STUDENT WHERE SNO='201215128'; SELECT \"SNO\FROM \"S-C\".\"STUDENT\"; 查询结果: 例3.77 查询命令: DELETE FROM \"S-C\".SC; 查询结果: 例3.78 查询命令: DELETE FROM \"S-C\".SC WHERE SNO IN (SELECT SNO FROM \"S-C\".STUDENT WHERE SDEPT='CS'); SELECT \"SNO\FROM \"S-C\".\"SC\"; 查询结果: 例3.79 查询命令: INSERT INTO \"S-C\".SC(SNO,CNO,GRADE) VALUES('201215126','1',NULL); SELECT \"SNO\FROM \"S-C\".\"SC\"; 查询结果: 例3.80 查询命令: UPDATE \"S-C\".STUDENT SET SDEPT=NULL WHERE SNO='201215123'; SELECT \"SNO\FROM \"S-C\".\"STUDENT\"; 查询结果: 例3.81 查询命令: SELECT* FROM \"S-C\".STUDENT WHERE SNAME IS NULL OR SSEX IS NULL OR SDEPT IS NULL; SELECT \"SNO\FROM \"S-C\".\"STUDENT\"; 查询结果: 例3.82 查询命令: SELECT SNO FROM \"S-C\".SC WHERE GRADE<60 AND CNO='1'; SELECT \"SNO\FROM \"S-C\".\"STUDENT\"; 查询结果: 例3.83 查询命令: SELECT SNO FROM \"S-C\".SC WHERE GRADE<60 AND CNO='1' UNION SELECT SNO FROM \"S-C\".SC WHERE GRADE IS NULL AND CNO='1'; SELECT \"SNO\FROM \"S-C\".\"STUDENT\"; 查询结果: 例3.84 查询命令: CREATE VIEW IS_STUDENT AS SELECT SNO,SNAME,SAGE FROM \"S-C\".STUDENT WHERE SDEPT='IS'; SELECT \"SNO\ FROM \"S-C\".\"IS_STUDENT\"; 查询结果: 例3.85 查询命令: CREATE VIEW IS_STUDENT AS SELECT SNO,SNAME,SAGE FROM \"S-C\".STUDENT WHERE SDEPT='IS' WITH CHECK OPTION; SELECT \"SNO\FROM \"S-C\".\"IS_STUDENT\"; 查询结果: 例3.86 查询命令: CREATE VIEW IS_S1(SNO,SNAME,GRADE) AS SELECT STUDENT.SNO,SNAME,GRADE FROM \"S-C\".STUDENT,\"S-C\".SC WHERE SDEPT='IS' AND STUDENT.SNO=SC.SNO AND SC.CNO='1'; SELECT \"SNO\FROM \"S-C\".\"IS_S1\"; 查询结果: 例3.87 查询命令: CREATE VIEW IS_S2 AS SELECT SNO,SNAME,GRADE FROM \"S-C\".IS_S1 WHERE GRADE>=90; SELECT \"SNO\FROM \"S-C\".\"IS_STUDENT\"; 查询结果: 例3.88 查询命令: CREATE VIEW BT_S(SNO,SNAME,SBIRTH) AS SELECT SNO,SNAME,2014-SAGE FROM \"S-C\".STUDENT; SELECT \"SNO\FROM \"S-C\".\"BT_S\"; 查询结果: 例3. 查询命令: CREATE VIEW S_G(SNO,GAVG) AS SELECT SNO,AVG(GRADE) FROM \"S-C\".SC GROUP BY SNO; SELECT \"SNO\FROM \"S-C\".\"S_G\"; 查询结果: 例3.90 查询命令: CREATE VIEW F_STUDENT(F_SNO,NAME,SEX,AGE,DEPT) AS SELECT* FROM \"S-C\".STUDENT WHERE SSEX='女'; SELECT \"F_SNO\ FROM \"S-C\".\"F_STUDENT\"; 查询结果: 例3.91 查询命令: DROP VIEW BT_S; DROP VIEW IS_S1 CASCADE; 查询结果: 例3.92 查询命令: SELECT SNO,SAGE FROM \"S-C\".IS_STUDENT WHERE SAGE<20; 查询结果: 例3.93 查询命令: SELECT IS_STUDENT.SNO,SNAME FROM \"S-C\".IS_STUDENT,\"S-C\".SC WHERE IS_STUDENT.SNO=SC.SNO AND SC.CNO='1'; 查询结果: 例3.94 查询命令: SELECT SNO,AVG(GRADE) FROM \"S-C\".SC GROUP BY SNO HAVING AVG(GRADE)>=90; 查询结果: 例3.95 查询命令: UPDATE IS_STUDENT SET SNAME='刘辰' WHERE SNO='200215125'; SELECT \"SNO\FROM \"S-C\".\"IS_STUDENT\"; 查询结果: 例3.96 查询命令: INSERT INTO \"S-C\".STUDENT(SNO,SNAME,SAGE,SDEPT) VALUES('201215129','赵新',20,'IS'); SELECT \"SNO\FROM \"S-C\".\"IS_STUDENT\"; 查询结果: 例3.97 查询命令: DELETE FROM \"S-C\".STUDENT WHERE SNO='201215129'AND SDEPT='IS'; SELECT \"SNO\FROM \"S-C\".\"IS_STUDENT\"; 查询结果: 5 实验结果及总结 1.本次实验主要进行了数据的更新实验,即数据的插入、修改、删除,和查询命令相似,要清楚更新内容所在的表,添加相应的条件语句来实现,以免误删。 实验名称: 数据库的安全性及完整性 时间:2015-12-10 地点:三教学楼205机房 班组:A 教师评语 成绩 实验报告 1 实验目的 1. 熟悉通过SQL对数据进行安全性控制。 教师签名 2 实验平台KingbaseES KingbaseES及其交互式查询工具ISQLW。 3 实验内容和要求 使用SQL对数据进行安全性控制,包括:授权和权力回收。操作完成后看看已授权的用户是否真正具有授予的数据操作的权力了;权力收回操作之后的用户是否确实丧失了收回的数据操作的权力)。根据操作过程认真填写实验报告,记录所有的实验用例。 3.1 首先在数据库中建立用户U1,U2,U3,U4,U5,U6,U7,选择全部为CONNECT角色,具体操作见课本141页; 3.2 在SYSTEM用户与7个CONNECT用户之间进行授权(例4.1-例4.13)。注意在完成授权或权利回收之后,以相应的用户登录数据库,检查是否获得相应的权利。 4 实验方法及步骤 1.以system的身份进入查询分析器,建立用户U1,U2,U3,U4,U5,U6,U7,密码均为123 查询命令: create user U1 with password'123'; create user U2 with password'123'; create user U3 with password'123'; create user U4 with password'123'; create user U5 with password'123'; create user U6 with password'123'; create user U7 with password'123'; 2.以system的身份进入企业管理器,查看用户 查询结果: 3.进行例4.1-例4.13的操作实验 例4.1把查询Student表的权限授给用户U1。 (1)以U1的身份进入查询分析器,进行任意查询。 查询命令: SELECT* FROM\"S-C\".\"STUDENT\" 查询结果: (2) 以system的身份进入企业管理器,授给用户U1,U2,U3,U4,U5,U6,U7,访问模式S-C的权限。 操作界面: (3) 再次以U1的身份进入查询分析器,进行任意查询。 查询命令: SELECT* FROM\"S-C\".\"STUDENT\" 查询结果: (4) 以system的身份进入查询分析器,把查询Student表的权限授给用户U1。 查询命令: grant select on table \"S-C\".\"STUDENT\" to U1 查询结果: (5) 再次以U1的身份进入查询分析器,进行任意查询。 查询命令: SELECT* FROM\"S-C\".\"STUDENT\" 查询结果: 例4.2把对Student表和Course表全部操作权限授予用户U2和U3。 (1)以U2/U3的身份进入查询分析器,进行任意查询。 查询命令: SELECT SNAME,SNO,SDEPT,CNAME FROM\"S-C\".\"STUDENT\查询结果: (2) 以system的身份进入查询分析器,把对Student表和Course表全部操作权限授予用户U2和U3。 查询命令: grant all privileges on table \"S-C\".STUDENT,\"S-C\".COURSE to U2,U3; 查询结果: (3) 以U2/U3的身份进入查询分析器,进行任意查询。 查询命令: SELECT SNAME,SNO,SDEPT,CNAME FROM\"S-C\".\"STUDENT\查询结果: 例4.3把对表SC的查询权限授予所有用户。 (1)以U3的身份进入查询分析器,进行任意查询。 查询命令: SELECT sno,cno FROM\"S-C\".\"SC\" where grade is NOT null; 查询结果: (2) 以system的身份进入查询分析器,把对表SC的查询权限授予所有用户。 查询命令: grant select on table \"S-C\".sc to public; 查询结果: (3) 以U3的身份进入查询分析器,进行任意查询。 查询命令: SELECT sno,cno FROM\"S-C\".\"SC\" where grade is NOT null; 查询结果: 例4.4把查询Student表和修改学生学号的权限授予用户U4。 (1)以U4的身份进入查询分析器,进行任意查询。 1. 以system的身份进入查询分析器,对student表插入一条新的学号 查询命令: INSERTINTO \"S-C\".STUDENT(SNO,SNAME,SSEX,SDEPT,SAGE) VALUES('201215128','陈冬','男','IS',18); SELECT * FROM \"S-C\".\"STUDENT\"; 查询结果: 2. 以U4的身份进入查询分析器,修改插入的学号 查询命令: UPDATE \"S-C\".STUDENT SET SNO=200215128 WHERE SNO='201215128'; SELECT * FROM \"S-C\".STUDENT; 查询结果: (2) 以system的身份进入查询分析器,把查询Student表和修改学生学号的权限授予用户U4。 查询命令: GRANT SELECT,UPDATE(SNO) ON TABLE \"S-C\".\"STUDENT\" TO U4; 查询结果: (3) 以U4的身份进入查询分析器,进行任意查询。 查询命令: UPDATE \"S-C\".STUDENT SET SNO=200215128 WHERE SNO='201215128'; SELECT * FROM \"S-C\".STUDENT; 查询结果: 例4.5把对表SC的INSERT权限授予U5用户,并允许将此权限在授予其他用户。 (1)以U5的身份进入查询分析器,进行任意查询。 查询命令: INSERT INTO \"S-C\".SC(SNO,CNO,GRADE) VALUES('201215128','1',NULL); SELECT * FROM \"S-C\".\"SC\"; 查询结果: (2) 以system的身份进入查询分析器,把对表SC的INSERT权限授予U5用户,并允许将此权限在授予其他用户。 查询命令: GRANT INSERT ON TABLE \"S-C\".\"SC\" TO U5 WITH GRANT OPTION; 查询结果: (3) 以U5的身份进入查询分析器,进行任意查询。 查询命令: INSERT INTO \"S-C\".SC(SNO,CNO,GRADE) VALUES('201215128','1',NULL); SELECT * FROM \"S-C\".\"SC\"; 查询结果: 例4.6 (1)以U6的身份进入查询分析器,进行任意查询。 查询命令: INSERT INTO \"S-C\".SC(SNO,CNO,GRADE) VALUES('201215126','1',NULL); SELECT * FROM \"S-C\".\"SC\"; 查询结果: (2) 以U5的身份进入查询分析器,把对表SC的INSERT权限授予U6用户,并允许将此权限在授予其他用户。 查询命令: GRANT INSERT ON TABLE \"S-C\".\"SC\" TO U6 WITH GRANT OPTION; 查询结果: (3) 以U6的身份进入查询分析器,进行任意查询。 查询命令: INSERT INTO \"S-C\".SC(SNO,CNO,GRADE) VALUES('201215126','1',NULL); SELECT * FROM \"S-C\".\"SC\"; 查询结果: 例4.7 (1)以U6的身份进入查询分析器,把对表SC的INSERT权限授予U7用户。 查询命令: GRANT INSERT ON TABLE \"S-C\".\"SC\" TO U7; 查询结果: (2) 以U7的身份进入查询分析器,把对表SC的INSERT权限授予U1用户。 查询命令: GRANT INSERT ON TABLE \"S-C\".\"SC\" TO U1; 查询结果: 例4.8把用户U4修改学生学号的权利收回 (1)以system的身份进入查询分析器,把用户U4修改学生学号的权利收回。 查询命令: REVOKE UPDATE ON TABLE \"S-C\".\"STUDENT\" FROM U4; 查询结果: (2) 以U4的身份进入查询分析器,对学生学号进行修改。 查询命令: UPDATE \"S-C\".STUDENT SET SNO=201215128 WHERE SNO='200215128'; 查询结果: 例4.9收回所有用户对表SC的查询权限。 (1)以system的身份进入查询分析器,收回所有用户对表SC的查询权限。 查询命令: REVOKE SELECT ON TABLE \"S-C\".\"SC\" FROM PUBLIC; 查询结果: (2) 以U1的身份进入查询分析器,对表SC进行任意查询 查询命令: SELECT Sno FROM \"S-C\".\"SC\"; 查询结果: 例4.10把用户U5对SC表的INSERT权限收回。 (1)以system的身份进入查询分析器,把用户U5对SC表的INSERT权限收回。 查询命令: REVOKE INSERT ON TABLE \"S-C\".\"SC\" FROM U5 CASCADE; 查询结果: (2) 以U5的身份进入查询分析器,对表SC进行INSERT权限测试。 查询命令: INSERT INTO \"S-C\".SC(SNO,CNO,GRADE) VALUES('201215126','1',NULL); SELECT * FROM \"S-C\".\"SC\"; 查询结果: 例4.11通过角色来实现将一组权限授予一个用户。 步骤如下 (1)以system的身份进入查询分析器,创建一个角色 查询命令: CREATE ROLE R1; 以system的身份进入企业管理器,查看用户 查询结果: (2)使用grant语句,使角色R1拥有Student表的SELECT、UPLECT、INSERT权限 查询命令: GRANT SELECT,UPDATE,INSERT ON TABLE \"S-C\".\"STUDENT\" TO R1; 查询结果: (3)将这个角色授予U7,使他们具有角色R1所包含的全部权限。 1.以U7的身份进入查询分析器,对Student表进行查询 查询命令: SELECT * FROM \"S-C\".\"STUDENT\"; 查询结果: 2. 将这个角色授予U7,使他们具有角色R1所包含的全部权限。 查询命令: GRANT R1 TO U7; 查询结果: 3.以U7的身份进入查询分析器,对Student表进行查询 查询命令: SELECT * FROM \"S-C\".\"STUDENT\"; 查询结果: (4)可以一次性地通过R1来收回U7的这三个权限。 1. 以system的身份进入查询分析器,一次性地通过R1来收回U7的这三个权限。 查询命令: REVOKE R1 FROM U7; 查询结果: 2.以U7的身份进入查询分析器,对Student表进行查询 查询命令: SELECT * FROM \"S-C\".\"STUDENT\"; 查询结果: 例4.12角色的权限修改。 (1)以system的身份进入查询分析器,增加角色R1对Student表的DELETE权限。 查询命令: GRANT DELETE ON TABLE \"S-C\".\"STUDENT\" TO R1; 查询结果: (2)将这个角色授予U7,使他们具有角色R1所包含的全部权限。 查询命令: GRANT R1 TO U7; 查询结果: (3) 以U7的身份进入查询分析器,进行对Student表的DELETE权限测试。 查询命令: DELETE FROM \"S-C\".STUDENT WHERE SNO='200215128'; SELECT * FROM \"S-C\".\"STUDENT\"; 查询结果: 例4.13 (1)以system的身份进入查询分析器,去除角色R1对Student表的DELETE权限。 查询命令: REVOKE DELETE ON TABLE \"S-C\".\"STUDENT\" FROM R1; 查询结果: (2) 以U7的身份进入查询分析器,进行对Student表的DELETE权限测试。 查询命令: DELETE FROM \"S-C\".STUDENT WHERE SNO='200215128'; 查询结果: 5 实验结果及总结 1.本次实验进行了数据库安全性控制的测试,主要是权限的授予与回收,分为授予或回收给用户和授予或回收给角色,通过授权给角色,在把角色授予用户来达到授予用户权限的效果,能较为方便的修改权限。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务