一、实验目的
1.理解数据库安全性概念,了解关系数据库中常用的安全策略;
2.掌握自主存取控制的原理,掌握授权语句的使用;
3.掌握Oracle数据库中的用户管理、权限管理和角色管理;
4.理解Oracle中模式的概念,理解模式与用户的关系。
- 实验过程
用SQL语句完成以下操作:
1.以系统用户sys登录数据库,创建两个数据库用户,用户名分别为“ua+学号后5位”和“ub+学号后5位”(假设学号后5位为18001,则新建用户的用户名为ua18001和ub18001,以下就以这两个用户名表示新建的两个用户),用户初始口令都为“888888”,要求将密码设置为过期状态,初次登录时强制修改密码。为两个用户指定默认表空间为users,并且在users表空间中使用大小不受限制。
语句内容:
//创建用户C##ua13466,并为其授权登录权限; //授权验证
create user C##ua13466
identified by 88888
default tablespace users
quota unlimited on users
password expire;
//创建用户C##ub13466,并为其授权登录权限;
create user C##ub13466
identified by 88888
default tablespace users
quota unlimited on users
password expire;
2.为了使ua18001和ub18001能够登录数据库,请为其授予相应的权限。
语句内容:
grant create session to C##ua13466;
grant create session to C##ub13466;
登录用户C##ua13428并修改用户的密码为123456;
登录用户C##ub13428并修改用户的密码为12345678;
3.授予用户ua18001在任何模式下创建表的权限,在任何模式下删除表的权限,授予用户ub18001在自己拥有的模式下创建表的权限,查询任何模式下表中数据的权限和在任何模式下创建视图的权限。
授权C##ua13466语句内容:
grant create any table,drop any table
to C##ua13466;
授权C##ub13466语句内容:
grant create table,select any table,create any view
to C##ub13466;
4.对两个用户的权限进行验证。
(1)用ua18001用户登录,分别写相应的SQL语句在自己的模式下和ub18001的模式下创建表(创建的表名及表结构自定)。在ub18001模式下建表时如果表中有主键约束,需要预先授予ua18001用户create any index的权限。
语句内容:
//在自己的模式下建表ta
create table ta(
Aname varchar2(10),
Anumber varchar2(6) primary key,
A_sex varchar2(6));
语句内容:
//在C##ub13466模式下建表ta
//先在sys用户下为C##ub13466授予create any index权限
grant create any index
to C##ua13466;
//在C##ua13466用户sql窗口验证
create table C##ub13466.tb(
Bname varchar2(10),
Bnumber varchar2(6) primary key,
B_class varchar2(6));
- 用ub18001用户登录,写出相应的SQL语句在ua18001模式下创建视图(视图名和视图结构自定)。
语句内容:
//C##ua13466用户sql窗口:
create view C##ua13466.ind_ta
as
select Aname,Anumber,A_sex
from ta;
5.用系统用户sys登录数据库,创建用户user_admin,将角色权限DBA授予用户user_admin,并将S、P、J、SPJ四张表导入到user_admin模式下。
语句内容:
create user C##user_admin
identified by 88888 //C##user_admin的密码88888
default tablespace users
temporary tablespace temp
quota unlimited on users;
6.用user_admin登录,完成以下授权。
(1)将表s的插入权限授予用户ua18001,并允许他再将此权限授予其他用户,在用户ua18001下写出相应语句验证插入权限。
语句内容:
grant insert on s
to C##ua13466
with grant option; //允许权限授予其他用户
//在C##ua13466下验证
insert into s values('s6','得胜','重庆','021-33166666');
commit;
//在C##user_admin查询插入情况
select *
from s;
(2)将表s,p,j的查询和插入权限授予用户ub18001,在ub18001用户下写出相应语句验证对s表的查询权限。
语句内容:
//在C##user_admin用户下授权
grant select,insert on s
to C##ub13466;
grant select,insert on p
to C##ub13466;
grant select,insert on j
to C##ub13466;
//在C##ub13466用户下验证对s表查询
select *
from C##user_admin.s
where sno='s6';
- 收回ua18001对s表的插入权限,收回权限后执行相应操作验证权限是否收回。
语句内容:
revoke insert
on s
from C##ua13466;
//在C##ua13466中验证对S表的插入权限
insert into C##user_admin.s values('s7','平安','日照','021-33166666');
commit;
- 把对用户ub18001授予的所有权限收回,只保留登录权限。注意:系统权限和对象权限应该分别写语句收回。
语句内容:
//收回C##ub13466--系统权限
revoke select,insert
on s
from C##ub13466;
revoke select,insert
on p
from C##ub13466;
revoke select,insert
on j
from C##ub13466;
//收回C##ub13466--对象权限
revoke create table,create any view,select any table from C##ub13466
- 用系统用户sys登录数据库,创建用户aam_admin,将角色权限DBA授予此用户,在aam_admin的模式下导入Sudent、Course、Teacher、TC和SC表。
语句内容:
//创建用户C##aam_admin
create user C##aam_admin
identified by 88888 //密码88888
default tablespace users
quota unlimited on users;
//权限授予
grant dba to C##aam_admin;
//Sudent、Course、Teacher、TC和SC导入
create table C##aam_admin.Student
(Sno varchar(10) primary key,
sname varchar(20),
ssex varchar(10),
snation varchar(15),
spolotical varchar(15),
sbirth date,
scollege varchar(40),
smajor varchar(40),
sclass varchar(15));
create table C##aam_admin.Course
(Cno varchar2(10) primary key,
cname varchar2(30),
credit varchar2(10),
cproperty varchar2(10),
chour varchar2(10),
cterm varchar2(10));
create table C##aam_admin.SC
(sno varchar2(10) references C##aam_admin.Student(sno),
cno varchar2(10) references C##aam_admin.course(cno),
grade number,
primary key(sno,cno));
create table C##aam_admin.Teacher
(Tno varchar2(10) primary key,
tname varchar2(20),
tsex varchar2(10),
tbirth date,
ttitle varchar2(10),
tcollege varchar2(20));
create table C##aam_admin.TC
(ID varchar2(10) primary key,
tno varchar2(10),
cno varchar2(10),
sclass varchar2(50),
semester varchar2(50),
timeplace varchar2(50));
9.使用aam_admin登录,创建角色school_manager,将aam_admin模式下五张表的插入、删除、修改和查询数据的权限授予角色school_manager,将角色的权限授予ub18001。
语句内容:
create role C##school_manager;
grant insert,delete,update,select on Student to C##school_manager;
grant insert,delete,update,select on Course to C##school_manager;
grant insert,delete,update,select on SC to C##school_manager;
grant insert,delete,update,select on Teacher to C##school_manager;
grant insert,delete,update,select on TC to C##school_manager;
grant C##school_manager to C##ub13466;
10.对于通过school_manager角色授出的权限,任意挑选一个表上的查询权限在ub18001用户下执行SQL语句进行验证。注意:如果验证时报错显示没有权限,关闭ub18001用户的登录窗口,重新登录后验证即可。
语句内容:
select * from C##aam_admin.Student;
- 实习总结
1.存在问题
①为什么已经给了权限,进行插入验证但是还是没有插入元组,重复执行,提示违反唯一性约束?
解决:在C##user_admin中没有找到插入的数据,一方面第一次commit没有成功,另一方面已经插入后多次执行造成主码值重复,违反唯一性约束,这时退出C##user_admin用户后重新登录即可更新已经插入的数据。
②操作过程中插入的数据类型不合适,需要及时修改表的结构,然后在提交表格数据,就可以成功插入数据。
③第10题验证过程出现“表或视图不存在”的错误,经过检查在C##aam_admin用户下5张表格已经完全导入,但是在C##ub13466中无法实现对select语句的验证,并且在左侧的用户中找到C##aam_admin,发现其用户下的Table栏为空,最后的解决办法为将C##ub13466退出重新登录后,发现可以成功查询到C##aam_admin中的数据。
2.实习总结
①通过数据库安全性的实习部分,了解了用户和模式的关系与区别。
用户:Oracle用户是用连接数据库和访问数据库对象的。(用户是用来连接数据库访问数据库)
模式:模式是数据库对象的集合。模式对象是数据库数据的逻辑结构。(把数据库对象用模式分开成不同的逻辑结构)
用户与模式的区别:用户是用来连接数据库对象。而模式用是用创建管理对象的。(模式跟用户在oracle 是一对一的关系)
在通过权限授予,在本模式下对其它模式中的表或者视图需要加前缀模式名,才可以对其他模式进行数据操作。
②通过学习用户管理、模式、权限管理、角色管理四方面加深了对于自主存取控制方法的了解和具体实现。
③在实验过程中对之前学习过的增删查改基本的语句内容均有涉及,因此,需要熟练掌握基本的语法格式/规则,在解决复杂的问题或者对语句的验证过程综合的运用。