第1关:授予某数据库的所有权限

任务描述
本关任务:授权 user1@localhost用户对数据库 teachingdb及其所有对象的管理权限

相关知识
为了完成本关任务,你需要掌握 MySQL 的权限管理。

MySql系统库中的权限表
MySql 系统库中的权限表:
user:最重要的权限表,存储允许连接到服务器的账号。
db:存储用户对某个数据库的操作权限。
host:存储某个主机对数据库的操作权限。
tables_priv:对单个表进行权限设置。
columns_priv:对单个数据列进行权限设置。
columns_priv:对存储过程和存储函数进行权限设置。

访问控制的两个阶段:
1、连接核实阶段
用户试图连接 MySQL 服务器时,服务器基于用户提供的信息来验证用户身份。使用 MySQL 的 user 表进行身份核实
2、请求核实阶段
对当前用户的每个操作都进行权限检查,判断用户是否有足够的权限来执行它。
如图所示:


授予的权限等级:
全局层级:适用于一个给定服务器中所有的数据库。
数据库层级:适用于一个给定数据库中的所有目标。
表层级:适用于一个给定表中的所有列。
列层级:适用于一个给定表中的单一列。
子程序层级:适用于存储的子程序 ,可以被授权为全局层级和数据库层级。

MySQL 权限类型
如图所示:

grant 语句的基本语法格式
grant 语句的基本语法格式:

 grant  priv_type [(column_list)]   //要设置的权限项;
[,priv_type[(column_list)]][,.....n] on
 {tbl_name|*|*.*|db_name.*|db_name.tbl_name}  //对象类型;
to user[identified by [password] ‘password’]
[,user[identified by [password] ‘password’]][,....n]
[with grant_option]  //可以将该用户的权限转移给其他用户;
示例:使用 grant 语句创建一个新用户 test1,密码为 test123,该用户对所有的数据又查询、插入的权限,并授予 grant 权限。

grant select,insert on *.* to test1@localhost identified by ‘test123’ with grant option; 
revoke 语句的基本语法格式
revoke 语句的基本语法格式:

  revoke priv_type [(column_list)][,priv_type[(column_list)]][,.....n] on 
{tbl_name|*|*.*|db_name.*|db_name.tbl_name}
from ‘username’@’hostname’[,‘username’@’hostname’][,...n]
使用 revoke 语句收回收回 test1 用户对 course 数据库中 student 表的 update 权限示例:

revoke update on course.student from test1@localhost; 
查看权限
语法:

show grants for  username@hostname 
例子: 查用用户 test1 的权限信息

 show grants for  test1@localhost;
限制权限
max_queries_per_hour count:表示每小时可以查询数据库的次数。
max_connections_per_hour count:表示每小时可以连接数据库的次数
max_updates_per_hour count:表示每小时可以修改数据库的次数。

示例:授予 test1 每小时可以发出的查询数为 50 次,每小时可以连接数据库 10 次,每小时可以发出的更新数为 5 次。

 grant all on *.* to test1@localhost identified by ‘test123’ 
with max_queries_per_hour 50
with max_connections_per_hour 10
with max_updates_per_hour 5;
编程要求
根据提示,在右侧编辑器补充代码,授权 user1@localhost用户对数据库 teachingdb及其所有对象的管理权限。

测试说明
编写代码后,点击测评即可。

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

 use teachingdb;
 grant all on teachingdb.* to user1@localhost;
/*
fw吴科不准复制,下一个疯狂星期四给义父V50大洋方可复制
*/

第2关:授予某数据库对象的SELECT权限

任务描述
本关任务:授权 user1@localhost用户对数据库 teachingdb所有对象的SELECT 权限,并使该用户具有给其他用户授予相同权限的权限。

相关知识
见上一关

编程要求
根据提示,在右侧编辑器补充代码,授权 user1@localhost用户对数据库 teachingdb所有对象的SELECT 权限,并使该用户具有给其他用户授予相同权限的权限。

测试说明
点击右上角的重置命令行
先点击命令行,来到命令行界面

然后点击右侧的重置命令行按钮,进行重置


编写代码后,点击测评即可。

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

  grant select on teachingdb.* to user1@localhost with grant option;
/*
fw吴科不准复制,下一个疯狂星期四给义父V50大洋方可复制
*/
/*
辣鸡头歌多次评测不过关,且报错输出不变请务必去命令行重置环境!!!
辣鸡头歌多次评测不过关,且报错输出不变请务必去命令行重置环境!!!
辣鸡头歌多次评测不过关,且报错输出不变请务必去命令行重置环境!!!
以下几关通用
*/

第3关:授予某表上的所有权限

任务描述
本关任务:给用户 user1@localhost 和 user2 授予 stuednt 表上的所有权限。

相关知识
见上一关

编程要求
根据提示,在右侧编辑器补充代码。给用户 user1@localhost 和 user2 授予 stuednt 表上的所有权限。

测试说明
点击右上角的重置命令行
先点击命令行,来到命令行界面

然后点击右侧的重置命令行按钮,进行重置


编写代码后,点击测评即可。

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

 use teachingdb;
 /****请在此编写代码,操作完毕之后点击评测******/
 
 /**********Begin**********/
  
  grant all on teachingdb.student to user1@localhost, user2;
 /**********End**********/
/*
fw吴科不准复制,下一个疯狂星期四给义父V50大洋方可复制
*/

第4关:授予某表某列上的修改权限

任务描述
本关任务:给 user2 授予 score 表 grade 字段上的 UPDATE 权限,user2 的 host 为本地主机,即 localhost 。

相关知识
见上一关

编程要求
根据提示,在右侧编辑器补充代码。给 user2 授予 score 表 grade 字段上的 UPDATE 权限,user2 的 host 为本地主机,即 localhost 。

测试说明
本关卡不用重置命令行:编写代码后,点击测评即可。

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

 use teachingdb;
 
 /****请在此编写代码,操作完毕之后点击评测******/
 
 /**********Begin**********/
  grant update(grade)

on table score

to user2@localhost;
 /**********End**********/
/*
fw吴科不准复制,下一个疯狂星期四给义父V50大洋方可复制
*/

第5关:回收权限

任务描述
本关任务:从 user1@localhost 用户收回查询 teachingdb 所有对象的SELECT权限。

相关知识
见第一关

编程要求
根据提示,在右侧编辑器补充代码,从 user1@localhost 用户收回查询 teachingdb 所有对象的 SELECT 权限。

测试说明
点击右上角的重置命令行
先点击命令行,来到命令行界面

然后点击右侧的重置命令行按钮,进行重置


编写代码后,点击测评即可。

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

 use teachingdb;
 /****请在此编写代码,操作完毕之后点击评测******/
 
 /**********Begin**********/
   revoke select

  on table teachingdb.*

  from user1@localhost;
 /**********End**********/
/*
fw吴科不准复制,下一个疯狂星期四给义父V50大洋方可复制
*/

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐