一、实验目的
1.理解数据库安全性概念,了解关系数据库中常用的安全策略;
2.掌握自主存取控制的原理,掌握授权语句的使用;
3.掌握Oracle数据库中的用户管理、权限管理和角色管理;
4.理解Oracle中模式的概念,清楚模式与用户的关系。
二、实验内容
用SQL语句完成以下内容:
1.用系统帐户sys登录数据库,分别创建数据库用户lisa和tom,初始帐户口令都为“888888”,要求将密码设置为过期状态,初次登录时强制修改密码。为两个用户指定默认表空间为users,并且在users表空间中使用大小不受限制。
create user lisa identified by 888888
default tablespace users
temporary tablespace temp
quota unlimited on users ;
alter user lisa password expire;
create user tom identified by 888888
default tablespace users
temporary tablespace temp
quota unlimited on users ;
alter user tom password expire;
2.为了使lisa和tom能够登录数据库,请为其授予相应的权限。
grant create session to lisa;
grant create session to tom;
3.授予用户lisa在自己模式下创建表的权限,在任何模式下删除表的权限,授予用户tom可以在任何模式下创建表的权限,查询任何模式下表中数据的权限和在任何模式下创建视图的权限。
grant create table ,drop any table to lisa;
grant create any table,select any table ,create any view to tom;
(grant create any index to lisa;
grant create any index to tom;)
4.分别用lisa和tom登录,写出相应的SQL语句验证为其授予的权限。
(如果建立的表中有主键约束,需要预先授予lisa和tom用户create any index的权限。)
create table lisa.l1(sno varchar(30) primary key,cno varchar(20),grade number);
drop table tom.t1;
drop table l1;
create table tom.t1(jno varchar(30) primary key,sr varchar(20),title varchar(20));
create table lisa.t2(jno varchar(30) primary key,sr varchar(20),title varchar(20));
select * from job3.sc;
select * from tom.t1;
create view tom.view1 as select * from job3.student where scollege='信息工程学院';
create view lisa.view2 as select * from l1;
5.用系统帐户sys登录数据库,创建用户user1_admin,将角色权限DBA授予用户user1_admin,并将S、P、J、SPJ四张表导入到user1_admin模式下。
create user user1_admin identified by 888888
default tablespace users
temporary tablespace temp
quota unlimited on users ;
grant DBA to user1_admin;
6.用user1_admin登录,完成以下授权。(要求授完权后,在lisa和tom用户下执行相应的
SQL语句验证授权是否成功,相同的权限只需验证一个即可。)
(1)把对表s的insert权力授予用户lisa,并允许他再将此权限授予其他用户。
(2)用户tom对s,p,j三个表有select和insert权力
(3)用户lisa对spj表有delete权力,对qty字段具有update权力。
(4)收回lisa对s表的插入权限。*/
grant insert on s to lisa with grant option;
insert into user1_admin.s values('s6','中华','西安','12222');
--允许他再将此权限授予其他用户。
grant insert on user1_admin.s to tom;
insert into user1_admin.s values('s8','2','3',null);
select * from user1_admin.s;
经验证,可以插入。
grant select,insert on s to tom;
select * from user1_admin.s;
insert into user1_admin.s values('s7','1','1',null);
grant select,insert on p to tom;
select * from user1_admin.p;
insert into user1_admin.p values('p7','1','1',20);
grant select,insert on j to tom;
select * from user1_admin.j;
insert into user1_admin.j values('j8','1','1');
grant delete on spj to lisa;
grant update(qty)on spj to lisa;
update user1_admin.spj set qty = 10 where sno= 's1';
delete from user1_admin.spj where sno ='s5' and pno='p2';
经验证,操作无误。
7.把对用户tom授予的所有权限收回,只保留登录权限。(系统权限和对象权限应该分别写语句收回)
revoke create any table,select any table ,create any view from tom;
revoke select,insert on s from tom;
revoke select,insert on p from tom;
revoke select,insert on j from tom;
revoke create any index from tom;
8.用系统帐户sys登录数据库,创建用户user2_admin,将角色权限DBA授予此用户,
在user2_admin的模式下导入Sudent、Course、Teacher、TC和SC表。
create user user2_admin identified by 888888
default tablespace users
temporary tablespace temp
quota unlimited on users ;
grant DBA to user2_admin;
已成功导入。
9.使用user2_admin登录,创建角色school_manager,将user2_admin模式下五张表的插入、
删除、修改和查询数据的权限授予角色school_manager,将角色的权限授予tom。
create role school_manager ;
grant insert,delete,update,select on Student to school_manager;
grant insert,delete,update,select on Course to school_manager;
grant insert,delete,update,select on Teacher to school_manager;
grant insert,delete,update,select on TC to school_manager;
grant insert,delete,update,select on SC to school_manager;
grant school_manager to tom;
10.对于通过school_manager角色授出的权限,在tom用户下执行相应的SQL语句对权限进行验证。
Student表:
select * from user2_admin.Student;
insert into user2_admin.Student
values('203030','小红',null,null,null,null,null,null,null);
delete from user2_admin.Student where sno='203030';
update user2_admin.Student set ssex = '男' where sno = '101101';
Course表:
select * from user2_admin.Course ;
insert into user2_admin.Course values('2030303','英语',null,null,null,null);
delete from user2_admin.Course where cno='2030303';
update user2_admin.Course set credit = '2.5' where cno = '3094217' ;
Teacher表:
select * from user2_admin.Teacher ;
insert into user2_admin.Teacher values('203030','小红','女',null,null,null);
delete from user2_admin.Teacher where tno='203030';
update user2_admin.Teacher set tsex = '男' where tno ='1202087';
SC表:
select * from user2_admin.SC;
insert into user2_admin.SC values('203030','1',null);
delete from user2_admin.SC where sno='203030';
update user2_admin.SC set grade = 100 where sno='101504';
TC表:
select * from user2_admin.TC;
insert into user2_admin.TC values('203030','1','1',null,null,null);
delete from user2_admin.TC where id='203030';
update user2_admin.TC set tno = '1' where id ='1';
三、思考与回答
1.简述Oracle中模式与用户的关系。
用户:Oracle用户是用连接数据库和访问数据库对象的。(用户是用来连接数据库访问数据库)。
模式:模式是数据库对象的集合。模式对象是数据库数据的逻辑结构。(把数据库对象用模式分开成不同的逻辑结构)。
用户与模式的区别:用户是用来连接数据库对象。而模式用是用创建管理对象的。(模式跟用户在oracle 是一对一的关系。)
2.归纳总结数据库中常见的安全策略与方法。
用户身份鉴别;自主存取控制;强制存取控制;视图等等。
四、实验总结
1.本次实验通过写SQL语句创建用户,并给用户授以系统权限和对象权限,通过动手练习,对于语句更加熟悉。加深了对知识的理解。
2.创建角色,并给角色授权,再将角色授予给用户。对角色增加或删除权限时,被授予该角色的用户的权限也会相应的增加或删除权限。对于批量管理用户权限比较方便。
3.实验过程中,也出现了一些错误,比如表或试图不存在、权限不足等。在纠正错误的过程中,排查了自己的一些知识上的漏洞。