十八、MySQL-数据库管理
第2关:权限管理
任务描述
在上一关中我们学习了如何创建用户,不同得用户通常所具有得权限是不同的,例如:财务部门可以查看部门信息表,但不能对部门信息表进行修改。为了实现上述目的,就需要对不同用户设置相应的权限。
本关任务:
对用户进行权限管理
相关知识
上一关中我们学习了如何创建新用户,但新用户默认不具有任何权限,只能看到默认的information_schema数据库。
权限介绍
在上一关中我们简单介绍了USER表,USER表中不仅存储了User、Host和Password,还有关于用户权限的信息。可以使用命令:
desc mysql.user;
查看USER表的所有表项,关于权限的选项都以_priv结尾,这些表项的值被设置为Y或者N,代表有或者没有相应权限。
在MySQL5.5系统默认提供的mysql数据库中,还有以下数据表中存储有权限信息:
host表
db表
tables_priv表(某个表)
columns_priv表(某个表的某个列)
procs_priv表(存储过程、存储函数)
proxies_priv表(角色、用户组)
权限的级别(或范围)分为以下几种:
全局级别,作用于整个MySQL上;
数据库级别,作用于某一个或某几个数据库;
数据库内的对象级别,作用于数据库的表、视图等对象;
查看权限
MySQL5.5中查看当前用户的权限:
SHOW GRANTS;
MySQL5.5中查看指定用户的权限:
SHOW GRANTS FOR "用户名"@"主机名";
例如我们使用右侧命令行查看root用户的权限如下图

可以看出root用户具有所有权限。
添加权限
MySQL5.5中通常使用GRANT命令为用户添加权限,其语句如下
GRANT PRIVILEGES ON DATABASE.TABLE TO "用户名"@"主机名";
具体语义说明:
PRIVILEGES代表要赋予用户的权限;
DATABASE是数据库名,可以用*代表所有的数据库;
TABLE是数据表名,可以用*代表所有的数据表;
**"用户名"和"主机名"**标识要授权的登陆用户
PRIVILEGES处常用的权限选项如下表:
权限选项 作用对象
create 数据表结构
alert 数据表结构
drop 数据表结构
select 数据表数据
update 数据表数据
delete 数据表数据
insert 数据表数据
all privileges 所有对象
查看全部的权限选项我们可以使用命令:
SHOW PRIVILEGES;
执行效果如下图

这条命令会显示:权限选项、作用对象和注释,信息非常详细。
应用示例 (1):
GRANT all privileges ON *.* TO "new-user1"@"%";
FLUSH PRIVILEGES;
all privileges代表所有权限;
"new-user1"@"%"从任何主机登陆的new-user1用户;
*.*代表所有数据库的所有数据表
执行效果即为任何主机登陆的new-user1用户具有root权限。
应用示例 (2):
GRANT select,update ON db1.emp TO "new-user1"@"%";
FLUSH PRIVILEGES;
select,update代表赋予的权限选项;
"new-user1"@"%"从任何主机登陆的new-user1用户;
db1.emp代表所有db1数据库的emp数据表
执行效果即为任何主机登陆的new-user1用户对db1数据库的emp数据表具有查询和更新权限。
【注意】:添加权限后必须执行更新权限操作,否则不会生效!!
收回权限
MySQL5.5中通常使用REVOKE命令为用户添加权限,其语句如下
REVOKE PRIVILEGES ON DATABASE.TABLE FROM "用户名"@"主机名";
具体语义说明:
PRIVILEGES代表要赋予用户的权限;
DATABASE是数据库名,可以用*代表所有的数据库;
TABLE是数据表名,可以用*代表所有的数据表;
**"用户名"和"主机名"**标识要授权的登陆用户
REVOKE命令和GRANT命令的语句格式基本相同,区别是
GRANT 与 TO 一起使用
REVOKE 与 FROM 一起使用
应用示例 (1):
REVOKE select,update ON db1.emp FROM "new-user1"@"%";
FLUSH PRIVILEGES;
执行效果即为任何主机登陆的new-user1用户对db1数据库的emp数据表不具有查询和更新权限。
应用示例 (2):
GRANT select,update ON db1.emp TO "new-user1"@"%";
FLUSH PRIVILEGES;
REVOKE all privileges ON *.* FROM "new-user1"@"%";
FLUSH PRIVILEGES;
在这个示例中,使用REVOKE命令收回在所有数据库的所有数据表上的所有权限,这里我们可能会觉得前面的GRANT所添加的权限会被取消,但是实际执行效果如下

可以看出并没有收回赋予的权限。所以收回权限要**【注意】:**
必须收回赋予权限所对应的权限;
添加权限后必须执行更新权限操作,否则不会生效!!
编程要求
本关的任务为:公司创建了数据库db1,首先收回财务部门用户FD-user对员工信息表emp的更新权限(UPDATE);然后为人力部门用户HR-user添加对员工信息表emp的查询(SELECT)和更新(UPDATE)权限。
【注意】:
财务部门用户FD-user从主机202.200.2.210登陆;
人力部门用户HR-user从主机202.200.3.110登陆;
执行语句时使用root管理员身份
测试说明
我们已经登录了MySQL,你只需要在右侧代码窗口输入MySQL语句实现以上操作,平台将自动编译你输入的MySQL语句。请注意语句的格式!请不要删去注释信息!
成功通关后预计输出:
success-收回权限成功
success-添加权限成功
人的大脑和肢体一样,多用则灵,不用则废。------茅以升

开始你的任务吧,祝你成功!
如果你觉得这一关的内容对你有帮助,请你在下面点赞。

//请在下面输入收回用户FD-user对员工信息表emp的更新权限的MySQL语句
/*********begin*********/
REVOKE UPDATE ON db1.emp FROM "FD-user"@"202.200.2.210";
FLUSH PRIVILEGES;
/********* end *********/
//请在下面输入为用户HR-user添加对员工信息表emp的查询和更新权限的MySQL语句
/*********begin*********/
GRANT SELECT,UPDATE ON db1.emp TO "HR-user"@"202.200.3.110";
FLUSH PRIVILEGES;
/********* end *********/
有任何问题都可以随时关注私信!