实训五:数据库安全控制 - MySQL-安全性控制

news/2024/10/20 11:25:01/

MySQL-安全性控制

  • 第1关:用户和权限
    • 任务描述
    • 相关知识
    • MySQL的安全控制机制
    • 用户(User)
    • 权限
      • 角色(Role)
      • GRANT授权语句
      • REVOKE收回权限语句
    • 编程要求
    • 测试说明
    • 参考代码
  • 第2关:用户、角色与权限
    • 任务描述
    • 相关知识
    • 编程要求
    • 测试说明
    • 参考代码

第1关:用户和权限

任务描述

本关任务:
在金融应用场景数据库环境中,创建用户,并给用户授予指定的权限。

相关知识

为了完成本关任务,你需要掌握:
1.MySQL的安全控制机制
2.create user语句的使用
3.grant和revoke语句的使用。

MySQL的安全控制机制

与大多数商用DBMS一样,MySQL采用自主存取控制(DAC)机制进行安全性管理。通过用户,数据对象,权限,授权,收回权限等要素进行存取控制。另外,为了方便批量授权给同一类用户,引入了角色。

用户(User)

MySQL创建用户的语句:
create user 用户名 identified by 用户登录密码;
通常用户名可包含域名,限定用户在该域名内登录再有效。例:
CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'password';
该语句创建用户jeffrey,密码为’password’,仅限在MySQL服务器本机上登录才有效。用户名与域合起来,被称为账户(account)。
注意不要写成:‘jeffrey@localhost’,它代表账户:
‘jeffrey@localhost’@‘%’
意即用户名为jefrrey@localhost,在任何机器上登录都有效。两者的含义完全不同。
省略域名,即默认为’%',表示用户可远程登录。在本实训中,可以省略域,这时,用户名可以不加引号。

drop user语句可删除用户。用户被删除时,该用户拥有的权限自动被收回。
alter user语句可重置用户密码:
ALTER USER user IDENTIFIED BY 'new_password';

MySQL在安装时,初始用户名为root,此为系统管理员用户,其余用户均由root创建,并授权。经授权的用户也可以创建用户。

在生产环境中,除了管理员,其它人应当使用由管理员创建的账户,不得使用root帐户。出于安全考虑,一般root用户也仅限在服务器本地登录,不轻易开放远程登录。

权限

MySQL常用的权限有:

  • all: 所有权限(grant option除外)
  • alter: alter table权限
  • alter routine: alter 存储过程
  • create: create database/table
  • create role: create role
  • create foutine: create 存储过程和函数
  • create user: create/alter/rename/drop user
  • create view: create view
  • delete: delete语句
  • drop: drop database/table
  • drop role: drop role
  • execute: 调用存储过程或函数
  • index:create/drop index
  • insert: insert语句
  • select: select语句
  • trigger: 触发器相关操作
  • update: update语句 等。 select,update,insert,delete还可以用在列上,如select(c_id),update(b_balance)等。

角色(Role)

角色是权限的集合。如果有一组人(承担相同职责的小组,或者説小组成员扮演相同的角色)应该被授予一组相同的权限,不妨创建一个角色,将那组权限授予该角色,然后再将角色授予该组的每个成员。这比一个个地给每个组员授予一批权限要方便得多。

创建角色的语句:
CREATE ROLE [IF NOT EXISTS] role [, role ] ...
一次可以创建多个角色。
删除角色:
DROP ROLE [IF EXISTS] role [, role ] ...
角色被删除后,拥有该角色的用户立即失去角色定义的权限组合。不过,如果用户同时拥有多个角色,两个角色代表的权限集合如果有交集,则该用户仍拥有交集代表的权限。

GRANT授权语句

以下语句授予权限给用户或角色:
grant 权限[,权限] ... on 数据库对象 to user|role,[user|role]... [with grant option]
可以同时将多个权限授予多个用户或角色。
with grant option表示被授权用户可以传播权限,即授权该用户将其拥有的权限(之前获得的权限,通过本语句获得的权限,以及今后获得的权限)再授予其它用户。

以下语句授予角色所代表的权限集给用户或角色:
GRANT role [, role] ... TO user_or_role [, user_or_role] ... [WITH ADMIN OPTION]

总之,GRANT语句可以将权限或角色(权限集合)授予用户或角色。但是不能将权限和角色混合授予用户(或角色)。不过,你可以分开用两条不同的GRANT语句来实现:直接授权语句有关键词ON,间接授权(角色代表的权限集合)语句不带ON关键词。

REVOKE收回权限语句

以下语句将对象的权限从用户或角色手中收回:
revoke 权限[,权限]... on 数据库对象 from user|role[,user|role]...

下列语句把role所代表的权限集合从用户或角色中收回:
REVOKE role [, role ] ... FROM user_or_role [, user_or_role ] ...
如果用户本身拥有多个角色所代表的权限集合,而这些集合存在交集,收回其中部分角色代表的权限集后,用户可能仍拥有那个角色所代表的部分权限(交集代表的那部分权限)。

编程要求

在右侧代码文件编辑器填写语句,完成以下创建用户和授权操作:
(1) 创建用户tom和jerry,初始密码均为’123456’;
(2) 授予用户tom查询客户的姓名,邮箱和电话的权限,且tom可转授权限;
(3) 授予用户jerry修改银行卡余额的权限;
(4) 收回用户Cindy查询银行卡信息的权限。

说明:

  • 本实训的运行环境是之前查询实训中曾经使用过的金融场景数据库。
  • 除root用户外,已预设了一个名为Cindy的用户,Cindy已被root授予了一定权限。
  • 由于MySQL的用户密码采用加密存储,不可识别,评测程序不会也无法比较密码是否按要求设置,实际上密码可以任意设置。如果你想用创建的用户在命令行登录到MySQL检验的话,自己记得所设密码即可。
  • 命令行窗口与评测用的是不同的MySQL实例,你需要自己还原数据库(/data/workspace/myshixun/src/test1/finance1.sql)

附上相关表结构:
表1 client(客户表)

字段名称数据类型约束说明
c_idINTEGERPRIMARY KEY客户编号
c_nameVARCHAR(100)NOT NULL客户名称
c_mailCHAR(30)UNIQUE客户邮箱
c_id_cardCHAR(20)UNIQUE NOT NULL客户身份证
c_phoneCHAR(20)UNIQUE NOT NULL客户手机号
c_passwordCHAR(20)NOT NULL客户登录密码

表2 bank_card(银行卡)

字段名称数据类型约束说明
b_numberCHAR(30)PRIMARY KEY银行卡号
b_typeCHAR(20)银行卡类型(储蓄卡/信用卡)
b_c_idINTEGERNOT NULL FOREIGN KEY所属客户编号,引用自client表的c_id字段。
b_balanceNUMERIC(10,2)NOT NULL余额,信用卡余额系指已透支的金额

测试说明

评测程序将运行脚本,然后检查所有用户及其权限,当所有用户及其权限都正确时,即可通关。


开始你的任务吧,祝你成功!

参考代码

# 请填写语句,完成以下功能:
#(1) 创建用户tom和jerry,初始密码均为'123456';
create user tom identified by '123456';
create user jerry identified by '123456';
#(2) 授予用户tom查询客户的姓名,邮箱和电话的权限,且tom可转授权限;
grant select(c_name,c_mail,c_phone) on client to tom with grant option;
#(3) 授予用户jerry修改银行卡余额的权限;
grant update(b_balance) on bank_card to jerry;
#(4) 收回用户Cindy查询银行卡信息的权限。
revoke select on bank_card from Cindy;

第2关:用户、角色与权限

任务描述

本关任务:
创建角色,授予角色一组权限,并将角色代表的权限授予指定的一组用户。

相关知识

为了完成本关任务,你需要掌握:
1.创建角色;
2.通过角色授权。
相关知识点已在上一关讲述。

编程要求

在右侧代码文件编辑器填写语句,完成以下创建用户和授权操作:
(1) 创建角色client_manager和fund_manager;
(2) 授予client_manager对client表拥有select,insert,update的权限;
(3) 授予client_manager对bank_card表拥有查询除银行卡余额外的select权限;
(4) 授予fund_manager对fund表的select,insert,update权限;
(5) 将client_manager的权限授予用户tom和jerry;
(6) 将fund_manager权限授予用户Cindy.

说明:
在本关开始前,用户Cindy,tom,jerry的所有权限都已提前被revoke。

测试说明

评测程序将运行脚本,然后检查所有用户、角色及其权限,当所有用户、角色及其权限都正确时,即可通关。


开始你的任务吧,祝你成功!

参考代码

# 请填写语句,完成以下功能:
# (1) 创建角色client_manager和fund_manager;
create role client_manager,fund_manager;
# (2) 授予client_manager对client表拥有select,insert,update的权限;
grant select ,insert ,update on client to client_manager;
# (3) 授予client_manager对bank_card表拥有查询除银行卡余额外的select权限;
grant select(b_number,b_type,b_c_id) on bank_card to client_manager; 
# (4) 授予fund_manager对fund表的select,insert,update权限;
grant select,insert,update on fund to fund_manager;
# (5) 将client_manager的权限授予用户tom和jerry;
grant client_manager to tom,jerry;
# (6) 将fund_manager权限授予用户Cindy.
grant fund_manager to Cindy;

http://www.ppmy.cn/news/546988.html

相关文章

5.5.4 从IPv4到IPv6过渡——双协议栈

5.5.4 从IPv4到IPv6过渡——双协议栈 与软件版本更新不同,IP协议版本的更新不可能在短时间内完成,只能够采用逐步演进的方法,也就是说在很长一段时间内,必须允许两种协议的网络并存,并且能够确保网络能够互联互通&…

C# 文件的压缩与解压缩

依赖:.NET Framework 4.5及以上,引用 - 添加引用 - 程序集 System.IO.Compression System.IO.Compression.FileSystem —————————————————————————————— 针对文件夹的最简单的压缩与解压缩 1、目录必须存在 2、无法覆盖文…

虚拟机解压缩命令

虚拟机解压缩命令 1、.tar 用 tar –xvf 解压 2、.gz 用 gzip -d或者gunzip 解压 3、.tar.gz和.tgz 用 tar –xzf 解压 4、.bz2 用 bzip2 -d或者用bunzip2 解压 5、.tar.bz2用tar –xjf 解压 6、.Z 用 uncompress 解压 7、.tar.Z 用tar –xZf 解压 8、.rar 用 unrar e解压 9、…

tar 打包压缩与解压缩

tar 命令用于对文件进行打包压缩或解压缩。 在Linux系统中,常见的压缩包文件格式有很多,其中主要使用的是 .tar 或 .tar.gz 或 .tar.bz2 的格式。 1、tar 命令的参数 -c 创建压缩文件 -x 解压缩文件 -t 查看压缩包内有哪些文件 -z 使用 Gzi…

windows自带的压缩/解压缩(zip/unzip)功能-Powershell 的应用之一

压缩文件经常碰到, 一般可以下载免费的unzip软件, 但是要么很多广告,要么用一段时间就要购买。 其实windows自动的Powershell 就可以做压缩和解压的。 Powershell 是微软用于计算机管理的一个工具,很多方面与CMD 类似&#xff0c…

golang zip压缩/解压缩用法

最近有个需求,需要写个脚本,但要编译为exe可执行文件,首先考虑python打包,奈何使用pyinstaller打包后,出现各种各样的运行错误,最后放弃了,改为golang重写。因为要用到创建和解压zip文件&#x…

C语言实现哈夫曼压缩与解压缩的实现以及读取哈夫曼编码 万文长书,绝对详细哦

哈夫曼压缩与解压缩的实现 开始之前,务必要看!看了能更好的理解代码一、整体的布局二、模块功能实现1、压缩2、解压缩 三、尾记-主函数的详细介绍 开始之前,务必要看!看了能更好的理解代码 为了伙伴们更好的理解我们这个代码的实…

ZLib 解压缩工具

官网: http://www.zlib.net/ 功能:压缩一段字节流,但是不包含任何文件信息。所以如果要编写压缩数据,还要自定义头部信息之类的,自己生成对应的文件结构 设计:CMake编译工具(用于在windows中进行…