实验三:自主存取控制实验

news2024/11/24 0:54:39

【实验目的】

掌握自主存取控制权限的定义和维护方法。掌握在ORACLE数据库中定义用户、角色,分配权限给用户、角色,回收权限,以相应用户登录数据库验证权限分配是否正确的方法。

【实验内容】

设有一个企业,由总裁负责管理采购、销售和客户3三个部门。总裁adam;采购部门负责人dav,采购部门员工jeff;销售部门负责人tom,销售部门员工jane;客户部门负责人kath,客户部门员工mike;该企业一个信息系统覆盖采购、销售和客户三个部门业务,使用ORAClE数据库存取数据,根据要求使用自主存取控制机制设计一个具体的权限分配和验证方案。

首先用sys(不是system)用户,连接方式选择sysdba的方式登录数据,运行一下3条语句:

grant select on V_$session to public;

grant select on V_$sesstat to public;

grant select on V_$statname to public;

然后关闭窗孔重新以system用户登录,连接方式选择normal的方式,登录数据运行以下内容:

--system用户登录数据
--建立默认表空间
CREATE TABLESPACE qy_data
LOGGING
DATAFILE 'D:\qy_data.dbf'
SIZE 50m
AUTOEXTEND ON
NEXT 50m MAXSIZE 20480m
EXTENT MANAGEMENT LOCAL;

--建立临时表空间
CREATE temporary TABLESPACE qy_temp
tempfile 'D:\qy_temp.dbf'
SIZE 50m
AUTOEXTEND ON
NEXT 50m MAXSIZE 20480m
EXTENT MANAGEMENT LOCAL;


--建立3个部门的表并填充数据

--建立采购表
create table purchase	 
( import_date date,         --入库时间
	item_code   varchar2(10), --商品代码
	item_name   varchar2(50), --商品名称
	amount      NUMBER        --入库数量
);

--建立销售表
create table sale
( sele_no    varchar2(10),  --销售订单编号
  sale_date  date,          --销售日期
	item_code   varchar2(10), --商品代码,对应采购表的商品代码
	item_name   varchar2(50), --商品名称
	amount      number,       --销售数量
  customer_no varchar2(10)  --客户编号,对应客户表的客户编码
);

--建立客户表
create table customer	 
( customer_no     varchar2(10),   --客户编号
	customer_name   varchar2(10)    --客户姓名
);


begin
--采购表插入数据
insert into purchase VALUES (to_date('2022-10-01','yyyy-mm-dd'),'10001','空调',100);
insert into purchase VALUES (to_date('2022-10-02','yyyy-mm-dd'),'10002','冰箱',200);
--销售表插入数据
insert into sale VALUES ('S20220001',to_date('2022-10-02','yyyy-mm-dd'),'10001','空调',1,'C0001');
insert into sale VALUES ('S20220002',to_date('2022-10-02','yyyy-mm-dd'),'10001','空调',2,'C0002');
insert into sale VALUES ('S20220003',to_date('2022-10-03','yyyy-mm-dd'),'10001','空调',2,'C0001');
insert into sale VALUES ('S20220004',to_date('2022-10-03','yyyy-mm-dd'),'10002','冰箱',2,'C0003');
insert into sale VALUES ('S20220005',to_date('2022-10-04','yyyy-mm-dd'),'10002','冰箱',1,'C0004');
--客户表插入数据
insert into customer VALUES ('C0001','张三');
insert into customer VALUES ('C0002','李四');
insert into customer VALUES ('C0003','王五');
insert into customer VALUES ('C0004','赵六');
commit;
end;

一、创建用户

为总裁、各部门负责人、各部门员工在数据库中创建用户,用户名称跟人员姓名一致。默认表空间都用’qy_data’,临时表空间都用’qy_temp’,密码都为’123456’;

个人答案:

------------1-------------
--1总裁角色
create user adam 		--用户名
identified by 123456 	--密码
default tablespace qy_data 	--默认表空间
temporary tablespace qy_temp	--临时表空间
--1采购部门负责人角色
create user dav 	--用户名
identified by 123456 	--密码
default tablespace qy_data 	--默认表空间
temporary tablespace qy_temp	--临时表空间
--1销售部门负责人角色
create user tom 		--用户名
identified by 123456 	--密码
default tablespace qy_data 	--默认表空间
temporary tablespace qy_temp	--临时表空间
--1客户部门负责人角色
create user kath		--用户名
identified by 123456 	--密码
default tablespace qy_data 	--默认表空间
temporary tablespace qy_temp	--临时表空间
--1采购部门员工角色
create user jeff		--用户名
identified by 123456 	--密码
default tablespace qy_data 	--默认表空间
temporary tablespace qy_temp	--临时表空间
--1销售部门员工角色
create user jane 		--用户名
identified by 123456 	--密码
default tablespace qy_data 	--默认表空间
temporary tablespace qy_temp	--临时表空间
--1客户部门员工角色
create user mike		--用户名
identified by 123456 	--密码
default tablespace qy_data 	--默认表空间
temporary tablespace qy_temp	--临时表空间

参考答案:

create user adam identified by 123456 default tablespace qy_data	temporary tablespace qy_temp;
create user dav identified by 123456 default tablespace qy_data	temporary tablespace qy_temp;
create user jeff identified by 123456 default tablespace qy_data	temporary tablespace qy_temp;
create user tom identified by 123456 default tablespace qy_data	temporary tablespace qy_temp;
create user jane identified by 123456 default tablespace qy_data	temporary tablespace qy_temp;
create user kath identified by 123456 default tablespace qy_data	temporary tablespace qy_temp;
create user mike identified by 123456 default tablespace qy_data	temporary tablespace qy_temp;

二、创建角色并分配权限

1、创建一个总裁角色president,总裁角色有所有表数据的查询、修改、插入和删除权限。

个人答案:


--2-1
create role president;
grant select,update,insert,delete
on purchase to president;
grant select,update,insert,delete
on sale to president;
grant select,update,insert,delete
on customer to president;

参考答案: 

create roles president;
grant select any table to president;
grant update any table to president;
grant insert any table to president;
grant delete any table to president;

2、各部门分别创建部分负责人角色:

采购部门负责人角色purchase_charge,包含查询和修改本部门表purchase权限,查询其它部门表权限

销售部门负责人角色sale_charge,包含查询和修改本部门表sale权限,查询其它部门表权限

客户部门负责人角色customer_charge,包含查询和修改本部门表customer权限,查询其它部门表权限

个人答案:

--2-2
--采购部门负责人角色
create role purchase_charge;
grant select,update
on purchase to purchase_charge;
grant select
on sale to purchase_charge;
grant select
on customer to purchase_charge;
--客户部门负责人角色
create role customer_charge;
grant select,update
on customer to customer_charge;
grant select
on sale to customer_charge;
grant select
on purchase to customer_charge;
--销售部门负责人角色
create role sale_charge;
grant select,update
on sale to sale_charge;
grant select
on purchase to sale_charge;
grant select
on customer to sale_charge;

参考答案: 

create roles purchase_charge;
grant select any table to purchase_charge;
grant update on purchase to purchase_charge;

create roles sale_charge;
grant select any table to sale_charge;
grant update on sale to sale_charge;

create roles customer_charge;
grant select any table to customer_charge;
grant update on customer to customer_charge;

3、各部门分别创建部分员工角色:

采购部门员工角色purchase_staff,包含查询表purchase权限

销售部门员工角色sale_staff,包含查询本部门表sale权限

客户部门员工角色customer_staff,包含查询本部门表customer权限

个人答案:

--2-3
create role purchase_staff;
grant select
on purchase to purchase_staff;
create role sale_staff;
grant select
on sale to sale_staff;
create role customer_staff;
grant select
on customer to customer_staff;

 参考答案:

create roles purchase_staff;
grant select on purchase to purchase_charge;

create roles sale_staff;
grant select on sale to purchase_charge;

create roles customer_staff;
grant select on customer to purchase_charge;

4、给用户分配权限

给这7个新创建的用户授予登录权限

给总裁用户授予总裁角色权限

给部门负责人用户授予对应的部门负责人角色权限

给部门员工授予对应的部门员工角色权限

个人答案:

---------4--------
grant connect,president to adam;
grant connect,purchase_charge to dav;
grant connect,sale_charge to tom;
grant connect,customer_charge to kath;
grant connect,purchase_staff to jeff;
grant connect,sale_staff to jane;
grant connect,customer_staff to mike;

参考答案:

grant connect,president to adam;
grant connect,purchase_charge to dav;
grant connect,purchase_staff to jeff;
grant connect,sale_charge to tom;
grant connect,sale_staff to jane;
grant connect,customer_charge to kath;
grant connect,customer_staff to mike;

5、权限调整

销售部门负责人角色sale_charge权限内容调整包含为查询和修改本部门表sale权限

回收mike客户部门员工权限

个人答案:

revoke select any table from sale_charge;
grant select,update 
on sale to sale_charge;
revoke customer_staff from mike;

 参考答案:

revoke select any table from sale_charge;
grant select on sale to sale_charge;
revoke customer_staff from mike;

 注意:如果期间执行语句失败可以删除相关表重新建立运行

drop user adam;
drop user dav;
drop user jeff;
drop user tom;
drop user jane;
drop user kath;
drop user mike;
drop role president;
drop role purchase_charge;
drop role sale_charge;
drop role customer_charge;
drop role purchase_staff;
drop role sale_staff;

6、权限验证

(1)以adam用户登录数据库,查询各个客户商品购买情况。查询结果内容为客户姓名、商品名称、购买总数量

个人答案:

select a.customer_name 客户姓名,
b.item_name 商品名称,
sum(b.amount) 购买总数量
from system.customer a
left join system.sale b on a.customer_no = b.customer_no
group by a.customer_name,
b.item_name

 

参考答案:

select a.customer_name 客户姓名,
        b.item_name 商品名称,
        sum(b.amount) 购买总数量
from system.customer a
left join system.sale b on a.customer_no = b.customer_no
group by a.customer_name ,
         b.item_name;
--执行成功

(2)以tom用户登录数据库,查询各个商品剩余数据。剩余数量=入库数量-出库数量。查询结果内容为商品名称、剩余数量

个人答案:使用mike系统登陆后得到正确的执行错误情况 

select a.item_name 商品名称,
a.amount - b. amount 剩余库存
from system.purchase a
left join (select item_code , sum(amount)amount
from system.sale
group by item_code) b on a.item_code = b.item_code

 

参考答案:

select a.item_name 商品名称,
       a.amount - b.amount 剩余库存
from system.purchase a
left join (select item_code ,sum(amount) amount
     from system.sale
     group by item_code) b on a.item_code = b.item_code;
--执行失败,失败原因为:ORA-00942:表或视图不存在

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/115029.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Pandas指南】Series

Pandas数据结构简介 - Series 来源:Pandas官网:https://pandas.pydata.org/docs/getting_started/intro_tutorials/index.html 笔记托管:https://gitee.com/DingJiaxiong/machine-learning-study 下面将从对 pandas 中的基本数据结构进行快速…

Git Bash Here和RStudio软件的问题解决

Git Bash Here和RStudio软件的问题解决 文章目录Git Bash Here和RStudio软件的问题解决0、 写在前面1、Git软件在任务栏图标空白2、RStudio软件2.1 警告信息InormalizePath(path.expand(path),winslash,mustWork)2.2 incomplete final line found by readTableHeader on报错3、…

推荐两个go语言的websocket库

最近在写一个需要前后端保持通信的服务。前端要能及时感知后端数据的变化,后端要及时处理前端发过来的指令。这种服务就需要用到websocket了。 以前在写websocket相关的程序时,一直在用gorilla/websocket这个库,这个库事实上已经成为了go语言…

后端面试之系统设计 - 用户密码如何储存在DB里

原文地址:码农在新加坡的个人博客 背景 现在很多网站都因为爆库导致密码泄漏,要设计怎么样的密码储存机制,才能保证最大限度的不被盗取,即使数据泄漏,黑客也无法在短时间内获取对应的密码来登录用户的账号&#xff0c…

LeanCloud: 数据存储实现小程序云开发

1. LeanCloud 官网传送 2. LeanCloud选择原因 微信小程序的开发包括上线需要一个备案过的域名,而域名备案又需要一个服务器(仅腾讯云而言)。而微信云开发作为个人开发者受限于费用也不做考虑。 此时不考虑复杂的业务逻辑数据库读取是后端服…

A股、港股上市公司碳排放、碳强度和碳披露数据(2018-2021年)

随着中国碳强度减排任务的不断加重,当前政策的就业红利将不复存在,同时政策机制蕴含的资源错配、各行业边际减排成本不相等的问题则愈加严重,实施碳交易减排政策的时机逐渐成熟,政府应如何根据二氧化碳排放量、碳强度和碳披露等数…

带你走进Java字符串的小世界

目录 一. String 1. 什么是String 2. String常用构造器 3. 字符串的判断 4. 字符串的获取 5. 字符串的转换 6. 字符串比较和替换 7. 字符串的切割 二. StringBuffer与StringBuilder 2.1 关于StringBuffer 2.1.1 定义 2.1.2 构造方法 2.2 关于StringBuffer 三. StringJoiner的使…

分布式缓存的四大痛点

目前开发中经常用到的缓存,是我们必不可缺的,他大大的提高了我们整个项目的响应速度和并发量。但是带来好处的同时,也给我们带了了新的问题:缓存穿透、缓存击穿、缓存雪崩以及缓存一致性这么四个问题,也是分布式缓存的…

LeetCode算法之----动态规划

点赞收藏,以防遗忘 本文【程序大视界】已收录,关注免费领取互联网大厂学习资料,添加博主好友进群学习交流,欢迎留言和评论,一起交流共同进步。 目录 【一】前言 【二】打家劫舍 【三】不同路径 【四】最小路径和 …

【数据预处理】基于Kettle的字符串数据清洗、Kettle的字段清洗、Kettle的使用参照表集成数据

文章目录一.前言1.1 实验内容二.实验过程2.1 实验内容一:掌握基于Kettle的字符串数据清洗2.2 实验内容二:掌握基于Kettle的字段清洗2.3 实验内容三:掌握基于Kettle的使用参照表集成数据2.4 实验心得:一.前言 需要本文章的源文件下…

用零知识证明连接多链宇宙

目录 一、前言 二、Bridges和Zero Knowledge Proofs 三、Succinct Verification of Proof of Consensus (Succinct Labs)

【自然语言处理】【ChatGPT系列】ChatGPT的智能来自哪里?

相关博客 【自然语言处理】【ChatGPT系列】ChatGPT的智能来自哪里? 【自然语言处理】【ChatGPT系列】Chain of Thought:从大模型中引导出推理能力 【自然语言处理】【ChatGPT系列】InstructGPT:遵循人类反馈指令来训练语言模型 【自然语言处理…

二叉搜索树与Mysql索引的亲密关系

欢迎关注公众号:【离心计划】,一起逃离技术舒适圈 二叉搜索树 二叉搜索树大家应该多多少少听过,它有一个很重要的特征,就是父节点左子树所有结点的值小于父节点的值,右子树所有结点的值大于父节点的值,这个…

详解vue中vuex的用法

前言 说到 vuex 相信大家都不陌生,vuex 是一个专为 vue.js 应用程序开发的状态管理模式。vuex 背后的基本思想,就是单向数据流。今天我们就来好好聊聊 vuex。 vuex? 用官方的话来说,vuex 是一个专为 vue.js 应用程序开发的状态管…

【Linux】进程间通信之共享内存与信号量初识

目录🌈前言🌸1、System V共享内存🍡1.1、概念🍢1.2、原理🌺2、共享内存相关函数和指令🍡2.1、shmget函数(创建)🍢2.2、shmctl函数(控制)&#x1f…

使用 DataAnnotations(数据注解)实现模型的通用数据校验

DataAnnotations 实现数据模型的通用校验参数校验的意义常用参数的校验.NET 中内置 DataAnnotations 提供的特性校验关于 DataAnnotations 中的特性介绍基于 DataAnnotations 的通用模型校验封装基于 DataAnnotations 的特性校验助手实现步骤如何使用 DataAnnotations 封装的特…

某农业学校 算法设计与分析-第五次实验-回溯算法

1. 罗密欧与朱丽叶的迷宫问题 问题描述 罗密欧与朱丽叶的迷宫。罗密欧与朱丽叶身处一个mn的迷宫中,如图所示。每一个方格表示迷宫中的一个房间。这mn个房间中有一些房间是封闭的,不允许任何人进入。在迷宫中任何位置均可沿8 个方向进入未封闭的房间。罗…

第二章:关系数据库

一、关系数据库结构及形式化定义 1、【单选题】 下图中,关系D1、D2、D3笛卡尔积的目和基数分别为 正确答案: B 2、【多选题】下图中能够作为候选码的属性组为 正确答案: ABD 3、【多选题】关于关系数据库,说法正确的是 正确答…

二、栈和队列

二、栈和队列 栈——后进先出 应用:数制转换、括号匹配、行编辑程序、迷宫求解、表达式求值、八皇后问题、函数调用、递归调用的实现 队列——先进先出 应用:脱机打印输出 多用户系统用户排队分时循环使用CPU和主存 按用户优先级排队,每…

编译gtest报错‘is_trivially_copy_constructible’ is not a member of ‘std’

编译gtest报错‘is_trivially_copy_constructible’ is not a member of ‘std’一、问题描述二、原因分析三、升级gcc版本四、验证一、问题描述 在一个新的Redhat7.6 linux虚拟机上,将gtest clone下来之后编译,一堆报错: /opt/googletest/…