资源描述
实 验 报 告
课程名称: 数据库系统概论
学 院: 工程学院
专 业:
年 级: 班 级:
姓 名: 学 号:
指导教师:
年 月 日
教务处 制
实验名称:
数据库安全性及完整性
时间:2015-12-17
地点:三教205机房
班组:
教 师 评 语
成绩
教师签名
实验报告
1 实验目的
1. 熟悉通过SQL对数据进行安全性控制。
2 实验工具KingbaseES
KingbaseES及其交互式查询工具ISQLW。
3 实验内容与要求
1.使用SQL对数据进行安全性控制,包括:授权与权力回收。操作完成后看看已授权的用户是否真正具有授予的数据操作的权力了;权力收回操作之后的用户是否确实丧失了收回的数据操作的权力)。根据操作过程认真填写实验报告,记录所有的实验用例。
2.首先在数据库中建立用户U1,U2,U3,U4,U5,U6,U7,选择全部为CONNECT角色,具体操作见课本141页;进行例4.1-4.13各操作。
3.在SYSTEM用户与7个CONNECT用户之间进行授权(例题1-12)。注意在完成授权或权利回收之后,以相应的用户登录数据库,检查是否获得相应的权利。
4 实验方法及步骤
例4.1 把查询student表的权限授给用户u1。
以system的身份进入查询分析器,建立用户U1,U2,U3,U4,U5,U6,U7,密码均为tcl
create user U1 with password'tcl';
create user U2 with password'tcl';
create user U3 with password'tcl';
create user U4 with password'tcl';
create user U5 with password'tcl';
create user U6 with password'tcl';
create user U7 with password'tcl';
以system的身份进入企业管理器,查看用户
以U1的身份进入查询分析器,进行任意查询。
SELECT* FROM"S-C"."STUDENT"
打开企业管理器设置u1的权限,以U1的身份进入企业管理器,把查询模式S-C的权限授给用户U1。
SELECT* FROM"S-C"."STUDENT"
以U1的身份进入企业管理器,把查询Student表的权限授给用户U1。
SELECT* FROM"S-C"."STUDENT"
注意:实验中若出现
则可以用语句drop owned by U1删除它
不懂删除的话,看kingbase用户手册
例4.2 把查询student表与course表的权全部操作限授给用户u2与u3。
SELECT* FROM"S-C"."STUDENT","S-C"."COURSE"
以system的身份进入查询分析器,把对Student表与Course表全部操作权限授予用户U2与U3。
GRANT ALL PRIVILEGES
ON TABLE "S-C"."STUDENT","S-C"."COURSE"
TO U2,U3;
以U2/U3的身份进入查询分析器,进行任意查询。
SELECT* FROM"S-C"."STUDENT","S-C"."COURSE"
例4.3把对表SC的权限授给所有用户.
以U3的身份进入查询分析器,进行任意查询。
SELECT* FROM"S-C"."SC"
以system的身份进入查询分析器,把对表SC的查询权限授予所有用户。
GRANT SELECT
ON TABLE "S-C"."SC"
TO PUBLIC;
以U3的身份进入查询分析器,进行任意查询。
SELECT* FROM"S-C"."SC"
例4.4 把查询student表与修改学生学号的权限授给用户u4。
以system的身份进入查询分析器,对student表插入一条新的学号
INSERT INTO "S-C".STUDENT(SNO,SNAME,SSEX,SDEPT,SAGE)
VALUES('201215128','陈冬','男','IS',18);
以U4的身份进入查询分析器,修改插入的学号
UPDATE "S-C".STUDENT
SET SNO=200215128
WHERE SNO='201215128';
SELECT * FROM "S-C".STUDENT;
以system的身份进入查询分析器,把查询Student表与修改学生学号的权限授予用户U4。
SELECT *
FROM "S-C"."STUDENT";
GRANT UPDATE(SNO),SELECT
ON TABLE "S-C"."STUDENT"
TO U4;
以U4的身份进入查询分析器,进行任意查询。
UPDATE "S-C".STUDENT
SET SNO=200215128
WHERE SNO='201215128';
SELECT *
FROM "S-C".STUDENT;
例4.5 把对表SC的INSERT权限授给用户u5,并允许将此权限再授予其他用户。
以U5的身份进入查询分析器,进行任意查询。
INSERT INTO "S-C".SC(SNO,CNO,GRADE)
VALUES('201215128','1',NULL);
SELECT * FROM "S-C"."SC";
以system的身份进入查询分析器,把对表SC的INSERT权限授予U5用户,并允许将此权限在授予其他用户。
GRANT INSERT
ON TABLE "S-C"."SC"
TO U5
WITH GRANT OPTION; /*此语句,U5不仅有对表SC的INSERT权限,还可以传播此权限。*/
以U5的身份进入查询分析器,进行任意查询。
INSERT INTO "S-C".SC(SNO,CNO,GRADE)
VALUES('201215128','1',NULL);
SELECT * FROM "S-C"."SC";
例4.6 u5将此权限授给用户u6。
以U6的身份进入查询分析器,进行任意查询。
INSERT INTO "S-C".SC(SNO,CNO,GRADE)
VALUES('201215126','1',NULL);
SELECT * FROM "S-C"."SC";
以U5的身份进入查询分析器,把对表SC的INSERT权限授予U6用户,并允许将此权限在授予其他用户。
GRANT INSERT
ON TABLE "S-C"."SC"
TO U6
WITH GRANT OPTION; /*此语句,U5不仅有对表SC的INSERT权限,还可以传播此权限。*/
以U6的身份进入查询分析器,进行任意查询。
INSERT INTO "S-C".SC(SNO,CNO,GRADE)
VALUES('201215126','1',NULL);
SELECT * FROM "S-C"."SC";
例4.7同样,u6还可以将此权限授给用户u7。
以U6的身份进入查询分析器,把对表SC的INSERT权限授予U7用户。
GRANT INSERT
ON TABLE "S-C"."SC"
TO U7;
以U7的身份进入查询分析器,把对表SC的INSERT权限授予U2用户。
GRANT INSERT
ON TABLE "S-C"."SC"
TO U2;
注意:因为U6未给U7传播的权限,因此U7不能再传播此权限。
例4.8 把用户U4修改学生学号的权限收回。
以system的身份进入查询分析器,把用户U4修改学生学号的权利收回。
REVOKE UPDATE
ON TABLE "S-C"."STUDENT"
FROM U4;
以U4的身份进入查询分析器,对学生学号进行修改。
UPDATE "S-C".STUDENT
SET SNO=201215128
WHERE SNO='200215128';
例4.9收回所有用户对表SC的查询权限。
以system的身份进入查询分析器,收回所有用户对表SC的查询权限。
REVOKE SELECT
ON TABLE "S-C"."SC"
FROM PUBLIC;
以U1的身份进入查询分析器,对表SC进行任意查询
SELECT grade FROM "S-C"."SC";
例4.10把用户U5对SC表的INSERT权限收回。
以system的身份进入查询分析器,把用户U5对SC表的INSERT权限收回。
REVOKE INSERT
ON TABLE "S-C"."SC"
FROM U5 CASCADE;
以U5的身份进入查询分析器,对表SC进行INSERT权限测试。
INSERT INTO "S-C".SC(SNO,CNO,GRADE)
VALUES('201215152','1',80);
SELECT * FROM "S-C"."SC";
例4.11通过角色来实现将一组权限授予一个用户。
以system的身份进入查询分析器,创建一个角色
CREATE ROLE R1;
以system的身份进入企业管理器,查看用户
刚刚创建的角色是空的,没有任何内容。我们使用grant语句,使角色R1拥有Student表的SELECT、UPLECT、INSERT权限
GRANT SELECT,UPDATE,INSERT
ON TABLE "S-C"."STUDENT"
TO R1;
将这个角色授予U7,使他们具有角色R1所包含的全部权限。
以U7的身份进入查询分析器,对Student表进行查询
SELECT * FROM "S-C"."STUDENT";
将这个角色授予U7,使他们具有角色R1所包含的全部权限。
GRANT R1 TO U7;
以U7的身份进入查询分析器,对Student表进行查询
SELECT * FROM "S-C"."STUDENT";
也可以一次性地通过R1来收回U7的这三个权限。
以system的身份进入查询分析器,一次性地通过R1来收回U7的这三个权限。
REVOKE R1
FROM U7;
以U7的身份进入查询分析器,对Student表进行查询
SELECT * FROM "S-C".STUDENT
;
CREATE ROLE R1;
CREATE ROLE 王平;
CREATE ROLE 张明;
CREATE ROLE 赵玲;
GRANT SELECT,UPDATE,INSERT
ON TABLE "S-C"."STUDENT"
TO R1;
GRANT R1
TO 王平;
GRANT R1
TO 张明;
GRANT R1
TO 赵玲;
REVOKE R1
FROM 王平;
例4.12角色的权限修改。
以system的身份进入查询分析器,增加角色R1对Student表的DELETE权限。
GRANT DELETE
ON TABLE "S-C"."STUDENT"
TO R1;
将这个角色授予U7,使他们具有角色R1所包含的全部权限。
GRANT R1 TO U7;
以U7的身份进入查询分析器,进行对Student表的DELETE权限测试。
DELETE FROM "S-C".STUDENT
WHERE SNO='200215128';
SELECT * FROM "S-C".STUDENT;
例4.13减少角色R1对Student表的select权限
以system的身份进入查询分析器,减少角色R1对Student表的select权限。
REVOKE select ON TABLE "S-C"."STUDENT" FROM R1;
以U7的身份进入查询分析器,进行对Student表的select权限测试。
Select sname FROM "S-C".STUDENT
WHERE SNO='200215128';
5 实验结果及总结
1. 实验的时候注意进入查询分析器的用户,不同的用户会有不同的查询结果。
2. 创建或者删除用户角色的时候要刷新,不然不会自己更新。
3. 注意在对权限的授予与收回的时候,要对比前后的不同结果,说明语句的执行结果。
4. WITH GRANT OPTION;此语句,U5不仅有对表SC的INSERT权限,还可以传播此权限。如果没有这条语句,则不能再传播此权限。
5. 可以看用户手册研究企业管理器的更多功能,还有kingbase的其它各种功能。
展开阅读全文