前言:记得验收时问了一个问题吧,就是用户和角色的区别是什么

实验2.1自主存取控制实验

1.实验目的

掌握自主存取控制权限的定义和维护方法。

2.实验内容和要求

定义用户、角色,分配权限给用户、角色,回收权限,以相应的用户名登录数据库验证权限分配是否正确。选择一个应用场景,使用自主存取控制机制设计权限分配。可以采用两种方案。
方案一:采用SYSTEM超级用户登录数据库,完成所有权限分配工作,然后用相应用户名登录数据库以验证权限分配正确性;

方案二:采用SYSTEM用户登录数据库创建三个部门经理用户,并分配相应的权限,然后分别用三个经理用户名登录数据库,创建相应部门的USER,ROLE,并分配相应权限。

下面的实验报告示例采用了实验方案一.验证权限分配之前,请备份好数据库;针对不同用户所具有的权限,分别设计相应的SQL语句加以验证。

3.实验过程

通过 SQL 的 GRANT 语句和 REVOKE 语句实现

用户权限组成

  • 数据对象
  • 操作类型

定义用户存取权限:定义用户可以在哪些数据库对象上进行哪些类型的操作

定义存取权限称为授权

GRANT

语句的一般格式:

GRANT <权限>[,<权限>]...
[ON <对象类型> <对象名>]
TO <用户>[,<用户>]...
[WITH GRANT OPTION];

语义:将对指定操作对象的指定操作权限授予指定的用户

WITH GRANT OPTION子句:

  • 指定:可以再授予
  • 没有指定:不能传播

REVOKE

  • 授予的权限可以由DBA或其他授权者用REVOKE语句收回

语句的一般格式为:

REVOKE <权限>[,<权限>]...
[ON <对象类型> <对象名>]
FROM <用户>[,<用户>]...;

设有一个企业,包括采购、销售和客户管理等三个部门,采购部门经理David,采购员Jeffery ;销售部门经理Tom ,销售员Jane;客户管理部门经理Kathy ,职员Mike。该企业一个信息系统覆盖采购﹑销售和客户管理等三个部门的业务,其数据库模式为TPC-H数据模式。针对此应用场景,使用自主存取控制机制设计一个具体的权限分配方案。

(0)开始准备

创建角色之后记得激活,可以把mysql设置为自动激活,(应该是一个用户对应一个全局变量act…,因为我做的时候是在创建角色的时候改过变量为ON,写这篇的时候直接在root下登录MySQL,发现这个变量是OFF)

show variables like 'activate_all_roles_on_login';
set global activate_all_roles_on_login = on;

(1)创建用户

  • 为采购、销售和客户管理等三个部门的经理创建用户标识,要求具有创建用户或角色的权利。
CREATE USER 'David' @'localhost' IDENTIFIED BY '123456';GRANT CREATE USER,
CREATE ROLE ON *.* TO 'David' @'localhost' WITH GRANT OPTION;CREATE USER 'Kathy' @'localhost' IDENTIFIED BY '123456';GRANT CREATE USER,
CREATE ROLE ON *.* TO 'Kathy' @'localhost' WITH GRANT OPTION;CREATE USER 'Tom' @'localhost' IDENTIFIED BY '123456';GRANT CREATE USER,
CREATE ROLE ON *.* TO 'Tom' @'localhost' WITH GRANT OPTION;

可以看到,成功创建了用户

  • 为采购、销售和客户管理等三个部门的职员创建用户标识和用户口令。
CREATE USER 'Jeffery'@'localhost' IDENTIFIED BY '123456';
CREATE USER 'Jane'@'localhost' IDENTIFIED BY '123456';
CREATE USER 'Mike'@'localhost' IDENTIFIED BY '123456';

可以看到,成功创建了用户

(2)创建角色并分配权限

1)为各个部门分别创建一个查询角色,并分配相应的查询权限。

  • 给采购部门创建一个角色 SELECT_purchase ,其具有查询零件表、供应商表、零件供应联系表的权限,对应其采购的需求
CREATE ROLE 'SELECT_purchase'@'localhost';GRANT SELECT ON test.part TO 'SELECT_purchase'@'localhost';  #test改成对应的数据库即可
GRANT SELECT ON test.supplier TO 'SELECT_purchase'@'localhost';
GRANT SELECT ON test.partsupp TO 'SELECT_purchase'@'localhost';SHOW GRANTS FOR 'SELECT_purchase'@'localhost';

运行结果如下:

  • 给销售部门创建一个角色 SELECT_sale ,其具有查询订单表和订单明细表的权限,对应其销售的需求
CREATE ROLE 'SELECT_sale'@'localhost';GRANT SELECT ON test.orders TO 'SELECT_sale'@'localhost';
GRANT SELECT ON test.lineitem TO 'SELECT_sale'@'localhost';SHOW GRANTS FOR 'SELECT_sale'@'localhost';

运行结果如下:

  • 给客户管理部门创建一个角色 SELECT_customer ,其具有查询顾客表、国家表、地区表的权限,对应其顾客管理的需求
CREATE ROLE 'SELECT_customer'@'localhost';GRANT SELECT ON test.customer TO 'SELECT_customer'@'localhost';
GRANT SELECT ON test.nation TO 'SELECT_customer'@'localhost';
GRANT SELECT ON test.region TO 'SELECT_customer'@'localhost';SHOW GRANTS FOR 'SELECT_customer'@'localhost';

运行结果如下:

2)为各个部门分别创建一个职员角色,对本部门具有查看、插入权限。

  • 给采购员Jeffery创建一个角色 WORKER_Jeffery,其具有插入和查询零件表、供应商表、零件供应联系表的权限
CREATE ROLE 'WORKER_Jeffery'@'localhost';GRANT INSERT,SELECT ON test.part TO 'WORKER_Jeffery'@'localhost';
GRANT INSERT,SELECT ON test.partsupp TO 'WORKER_Jeffery'@'localhost';
GRANT INSERT,SELECT ON test.supplier TO 'WORKER_Jeffery'@'localhost';SHOW GRANTS FOR 'WORKER_Jeffery'@'localhost';

运行结果如下:

  • 给销售员Jane创建一个角色 WORKER_Jane,其具有插入和查询订单表和订单明细表的权限
CREATE ROLE 'WORKER_Jane'@'localhost';GRANT INSERT,SELECT ON test.orders  TO 'WORKER_Jane'@'localhost';
GRANT INSERT,SELECT ON test.lineitem  TO 'WORKER_Jane'@'localhost';SHOW GRANTS FOR 'WORKER_Jane'@'localhost';

运行结果如下:

  • 给职员Mike创建一个角色WORKER_Mike,其具有插入和查询客表、国家表、地区表的权限
CREATE ROLE 'WORKER_Mike'@'localhost';GRANT INSERT,SELECT ON test.nation  TO 'WORKER_Mike'@'localhost';
GRANT INSERT,SELECT ON test.region  TO 'WORKER_Mike'@'localhost';
GRANT INSERT,SELECT ON test.customer TO 'WORKER_Mike'@'localhost';SHOW GRANTS FOR 'WORKER_Mike'@'localhost';

运行结果如下:

3)为各部门创建一个经理角色,相应角色对本部门的信息具有完全控制权限,对其他部门的信息具有查询权。经理有权给本部门职员分配权限。

CREATE ROLE 'Manager_David'@'localhost';GRANT ALL ON test.part TO 'Manager_David'@'localhost';
GRANT ALL ON test.partsupp TO 'Manager_David'@'localhost';
GRANT ALL ON test.supplier TO 'Manager_David'@'localhost';SHOW GRANTS FOR 'Manager_David'@'localhost';
CREATE ROLE 'Manager_Tom'@'localhost';GRANT ALL ON test.orders TO 'Manager_Tom'@'localhost';
GRANT ALL ON test.lineitem TO 'Manager_Tom'@'localhost';SHOW GRANTS FOR 'Manager_Tom'@'localhost';
CREATE ROLE 'Manager_Kathy'@'localhost';GRANT ALL ON test.nation TO 'Manager_Kathy'@'localhost';
GRANT ALL ON test.region TO 'Manager_Kathy'@'localhost';
GRANT ALL ON test.customer TO 'Manager_Kathy'@'localhost';SHOW GRANTS FOR 'Manager_Kathy'@'localhost';

总共创建如下:

经理:David Tom Kathy
员工:Jeffery Jane Mike
查询角色:SELECT_purchase SELECT_sale SELECT_customer
职员角色:WORKER_Jeffery WORKER_Jane WORKER_Mike
经理角色:Manager_David Manager_Tom Manager_Kathy

(3)给用户分配权限

1)给各部门经理分配权限。

GRANT 'Manager_David'@'localhost' TO 'David'@'localhost';
GRANT 'Manager_Tom'@'localhost' TO 'Tom'@'localhost';
GRANT 'Manager_Kathy'@'localhost' TO 'Kathy'@'localhost';SHOW GRANTS FOR 'David'@'localhost';
SHOW GRANTS FOR 'Tom'@'localhost';
SHOW GRANTS FOR 'Kathy'@'localhost';

运行结果如下:

2)给各部门职员分配权限。

GRANT 'WORKER_Jeffery'@'localhost' TO 'Jeffery'@'localhost';
GRANT 'WORKER_Jane'@'localhost' TO 'Jane'@'localhost';
GRANT 'WORKER_Mike'@'localhost' TO 'Mike'@'localhost';SHOW GRANTS FOR 'Jeffery'@'localhost';
SHOW GRANTS FOR 'Jane'@'localhost';
SHOW GRANTS FOR 'Mike'@'localhost';

(4)回收角色或用户权限

1)收回客户经理角色的销售信息查看权限。

REVOKE SELECT ON test.customer FROM 'Manager_Kathy'@'localhost';
REVOKE SELECT ON test.nation FROM 'Manager_Kathy'@'localhost';
REVOKE SELECT ON test.region FROM 'Manager_Kathy'@'localhost';SELECT Table_name,Table_priv FROM mysql.tables_priv WHERE user='Manager_Kathy';

结果如下:

可以看到,其收回了查询select的权限

2)回收Mike的客户部门职员权限

回收被赋予Mike的角色WORKER_Mike的权限,先查询它的权限有哪些

select * from mysql.tables_priv where user='WORKER_Mike';

收回其权限

REVOKE SELECT,INSERT ON test.customer FROM 'WORKER_Mike'@'localhost';
REVOKE SELECT,INSERT ON test.nation FROM 'WORKER_Mike'@'localhost';
REVOKE SELECT,INSERT ON test.region FROM 'WORKER_Mike'@'localhost';select * from mysql.tables_priv where user='WORKER_Mike';

(5)验证权限分配的正确性

1)以David用户名登录数据库,验证采购部门经理的权限

命令提示符输入

mysql -u David -p

输入密码后进入test数据库

use test;

验证采购部门经理的权限

SELECT * FROM part WHERE partkey=100;

SELECT * FROM partsupp WHERE partkey=100;
SELECT * FROM supplier WHERE suppkey=100;

可以看到,其能正常查询负责的几个表

2)验证Mike的客户部门职员权限。

输入quit退出David用户,再按照上面的方法进入Mike用户页面

输入show databases;查看结果

可以发现,其收回权限之后根本找不到test数据库

再来一个佐证:

查看和Mike同等级的Jane:

没有被回收角色权限的用户Jane就可以访问到test,验证成功

4.实验总结

在进行权限分配之后,针对不同用户所具有的权限,设计并执行若干SQL语句,验证权限分配是否有效。

5.思考题

(1)请分析WITH CHECK OPTION、 WIIH CRANT OPTION和WITH ADMIN OPTION有何区别与联系。

1)

with admin option和with grant option的区别:

级联授权:

WITH ADMIN OPTION和系统权限相关。
WITH GRANT OPTION和对象权限相关。
两种option都能让指定的用户级联授权。
举例:

1、sys用户赋权给lisi:
grant create session to lisi;—>能够连接实例
grant create session to lisi WITH ADMIN OPTION;—>lisi具有create session,并且可以将该权限赋权给其他用户。
2、lisi用户赋权给lisi1:
grant create session to lisi1;—>能够连接实例

回收权限:

1、WITH ADMIN OPTION(系统权限):
拥有WITH ADMIN OPTION的用户如果赋权给其他用户权限,则撤销权限时,仅撤销用户自己权限。
例如:
sys—>赋权给lisi—>lisi赋权给lisi1
sys revoke撤销lisi的系统权限,lisi的系统权限不受影响。

2、WITH GRANT OPTION(对象权限):
拥有WITH GRANT OPTION的用户如果赋权给其他用户权限,则撤销权限时,会发生级联权限撤销。
例如:
sys—>赋权给lisi—>lisi赋权给lisi1
sys revoke撤销lisi的对象权限,lisi1的对象权限失效。

with check option

with check option可以这么解释:通过视图进行的修改,必须也能通过该视图看到修改后的结果。视图加上with check option 子句后对该视图进行插入、修改、删除操作时,DBMS会自动加上条件(透过视图进行增删改操作时,不得破坏视图定义中的谓词条件(即子查询中的条件表达式))。

(2)请结合上述实验示例分析使用角色进行权限分配有何优缺点。

优点:管理权限方便,可以根据实际情况具体地为一些角色分配相应地权利,具有良好地安全性
缺点:操作繁琐。

实验2.2 审计实验

参考 审计实验

打开数据库审计开关。以具有审计权限的用户登陆数据库,设置审计权限,然后以普通用户登录数据库,执行相应的数据操纵SQL语句,验证相应审计设置是否生效,最后再以具有审计权限的用户登录数据库,查看是否存在相应的审计信息。
mysql本身并没有操作审计的功能,需要采用general log方法记录sql操作。网上的插件都是基于MySQL5.7版本的,由于我使用的是最新版8.21所以不是使用插件,而是使用mysql8.x提供的general log来实现审计功能。但是开启它有以下几个缺点

  • 无论sql有无语法错误,只要执行了就会记录,导致记录大量无用信息,后期的筛选有难度。
  • Sql并发量很大时,log的记录会对io造成一定的印象,是数据库效率降低。
  • 日志文件很容易快速膨胀,不妥善处理会对磁盘空间造成一定影响。

1.实验目的

掌握数据库审计的设置和管理方法,以便监控数据库操作,维护数据库安全。

2.实验内容和要求

打开数据库审计开关。以具有审计权限的用户登录数据库,设置审计权限,然后以普通用户登录数据库,执行相应的数据操纵SQL语句,验证相应审计设置是否生效,最后再以具有审计权限的用户登录数据库,查看是否存在相应的审计信息。

3.实验过程

(1)审计开关

1)显示当前审计开关状态。

SHOW GLOBAL VARIABLES LIKE 'log_timestamps';
SHOW GLOBAL VARIABLES LIKE '%general%';

说明未开启审计

2) 暂时打开全局审计

SET GLOBAL general_log=on;
SHOW GLOBAL VARIABLES LIKE '%general%';

3) 查看审计文件保存的位置

show variables like 'general_log_file';

4)测试审计文件记录功能

SELECT * FROM part WHERE partkey=100;
SELECT * FROM part WHERE partkey=101;
SELECT * FROM part WHERE partkey=102;
SELECT * FROM part WHERE partkey=103;

查看审计文件:

可以观察到审计文件中的记录了刚才的查询操作及其时间。

5)关闭审计文件

SET GLOBAL general_log=off;

4.实验总结

审计语句不是标准SQL语句,所以不同的系统语句格式和语法不尽相同。

5.思考题

试着设计一个例子,分析数据库审计对数据库性能的影响情况。

variables like ‘general_log_file’;


[外链图片转存中...(img-xqgq2LfQ-1671714762768)]4)测试审计文件记录功能```sql
SELECT * FROM part WHERE partkey=100;
SELECT * FROM part WHERE partkey=101;
SELECT * FROM part WHERE partkey=102;
SELECT * FROM part WHERE partkey=103;

查看审计文件:

[外链图片转存中…(img-fvZX15It-1671714762768)]

可以观察到审计文件中的记录了刚才的查询操作及其时间。

5)关闭审计文件

SET GLOBAL general_log=off;

4.实验总结

审计语句不是标准SQL语句,所以不同的系统语句格式和语法不尽相同。

5.思考题

试着设计一个例子,分析数据库审计对数据库性能的影响情况。

答:数据库审计功能用于监视并记录对数据库服务器的各类操作行为,并记入审计日志或数据库中以便日后进行跟踪、查询、分析,以实现对用户操作的监控和审计。MySQL本身提供详细的sql执行记录–general log,但是开启记录日志的话,只要执行了sql就会记录,无论是否有错误,这就会导致记录大量的无用信息,如果sql并发量很大时,log的记录会对io造成一定的印象,降低数据库效率。

数据库实验2 数据库安全性定义与检查相关推荐

  1. 数据库实验:数据库和表、查询、视图与安全性、存储过程及游标、触发器、综合实验-水果商店进阶

    数据库实验:数据库和表.查询.视图与安全性.存储过程及游标.触发器.综合实验-水果商店进阶 实验一.数据库和表 源码1: 源码2: 小结 实验二.查询 源码 小结 实验三.视图.安全性 源码: 小结 ...

  2. Oracle 11g 数据库 实验7 数据库安全管理

    Oracle 11g 数据库实验7 数据库安全管理 1.实验目的 (1)掌握Oracle数据库安全控制的实现. (2)掌握Oracle数据库用户管理. (3)掌握Oracle数据库权限管理. (4)掌 ...

  3. 数据库实验:数据库高级查询

    数据库实验:数据库高级查询 实验过程 (1) IN 嵌套查询 (2) 单层EXISTS 嵌套查询 (3) FROM 子句中的嵌套查询 (4) 集合查询(交) (5) 集合查询(并) (6) 集合查询( ...

  4. 数据库实验8 数据库安全性(用户与权限管理)实验

    实验8 数据库安全性(用户与权限管理)实验 8.1实验目的及要求 加深对数据库安全性的理解 8.2实验内容 数据库用户与权限管理 8.3实验步骤 8.3.1创建新用户 1.创建新用户: Mysql&g ...

  5. 数据库实验7 数据库视图的定义与使用

    实验7 数据库视图的定义与使用 7.1实验目的及要求 掌握视图的用法,加深对视图作用的理解 7.2实验内容 1.创建.修改和删除视图 2.利用视图进行查询 7.3实验步骤 7.3.1视图的创建(查看视 ...

  6. 数据库实验一 数据库定义

    实验一 数据库定义 一.实验目的 理解和掌握数据库DDL语言,能够熟练使用SQL DDL语句创建.修改.删除数据库.模式和表,能够创建合适的索引以提高数据库查询效率. 二.实验内容和要求 1.创建学生 ...

  7. 数据库实验六 数据库的完整性

    实验六 数据库的完整性 一.实验目的 1.掌握实体完整性的定义和维护方法. 2.掌握参照完整性的定义和维护方法. 3.掌握用户自定义完整性的定义和维护方法. 4.掌0握触发器的设计和使用方法 二.实验 ...

  8. 数据库实验2 数据库及数据库表的建立

    实验2  数据库及数据库表的建立 一.实验目的 本实验的目的是使学生熟悉SQL Server 2008的企业管理器的用法,初步了解SQL Server查询分析器的使用方法,熟悉SQL SERVER的常 ...

  9. 数据库实验5 数据库设计实验

    前言:不知道啥原因,最后设计出来少了一个表,无语 实验5 数据库设计实验 1.实验目的 掌握数据库设计基本方法及数据库设计工具. 2.实验内容和要求 掌握数据库设计基本步骤,包括数据库概念结构设计.逻 ...

最新文章

  1. javaweb友好的删除提示语句!
  2. matlab nargout
  3. Python 入门 Day4
  4. 1057. 数零壹(20)
  5. 极简教程: 使用 matplotlib 绘制 GIF 动图
  6. 《数据库SQL实战》从titles表获取按照title进行分组
  7. 数据库设计的核心原则 外键的设计 提高插入数据速度
  8. 计算机开机coms错误,电脑开机提示“CMOS checksum error-Defaults loaded”怎么办?
  9. 100套高质量的免费 PSD 界面设计素材【系列一】
  10. posix threads php,3分钟短文 | PHP多线程没用过,你可能错过了计算机最好的时代!...
  11. github中的各种操作
  12. IDEA 没有创建servlet选项问题的解决
  13. 数字盲打怎么练_数字键盘区的功能及指法技巧
  14. 一个简单的前后端分离案例
  15. 使用Jorm简单的增删查改数据库
  16. 教育学相关期刊杂志介绍
  17. 【Scratch案例实操】scratch我们爱编程 scratch编程案例教学 scratch创意编程 少儿编程教案
  18. 举例Halcon,简述数字图像处理之Blob分析和纹理分析texture_laws
  19. Python 使用 OpenCC 实现中文简繁转换
  20. stc12c5a60s 超声波HC-SR04测距

热门文章

  1. 5分钟成为车联网专家 | 全球首个C-V2X车联网城市级规模示范应用
  2. 12306之梆梆加固libsecexe.so的脱壳及修复
  3. 最新公布!“中国开发者大调查”第二批中奖名单出炉啦
  4. Practical GameMaker Projects 免积分下载
  5. 机器学习笔记(六)-神经网络:概述
  6. 办公大师系列经典丛书 诚聘译者
  7. 华为MateBook E二合一笔记本发布:首次采用OLED原色屏
  8. html查看蛋白质,怎么查询蛋白质的全部信息-- UniProKB数据库
  9. 分析了漫威电影后,才知道竟如此流弊
  10. python 数据挖掘_Python数据挖掘框架scikit数据集之iris