数据库实验4--数据库安全性

一、实验目的

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));

  1. 用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';

  1. 收回ua18001对s表的插入权限,收回权限后执行相应操作验证权限是否收回。

语句内容:

revoke insert

on s

from C##ua13466;

//在C##ua13466中验证对S表的插入权限

insert into C##user_admin.s values('s7','平安','日照','021-33166666');

commit;

  1. 把对用户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

  1. 用系统用户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 是一对一的关系)

在通过权限授予,在本模式下对其它模式中的表或者视图需要加前缀模式名,才可以对其他模式进行数据操作。

②通过学习用户管理、模式、权限管理、角色管理四方面加深了对于自主存取控制方法的了解和具体实现。

③在实验过程中对之前学习过的增删查改基本的语句内容均有涉及,因此,需要熟练掌握基本的语法格式/规则,在解决复杂的问题或者对语句的验证过程综合的运用。

  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值