MYSQL进阶学习笔记十五:MySQL 的账号权限赋予!(视频序号:进阶_33,34)

Wesley13
• 阅读 616

知识点十六:MySQL的账号权限赋予(33)

一、MySQL权限简介

关于mysql的权限简单的理解就是mysql允许你做你全力以内的事情,不可以越界。比如只允许你执行select操作,那么你就不能执行update操作。只允许你从某台机器上连接mysql,那么你就不能从除那台机器以外的其他机器连接mysql。

那么Mysql的权限是如何实现的呢?这就要说到mysql的两阶段验证,下面详细介绍:

第一阶段:服务器首先会检查你是否允许连接。因为创建用户的时候会加上主机限制,可以限制成本地、某个IP、某个IP段、以及任何地方等,只允许你从配置的指定地方登陆。

第二阶段:如果你能连接,Mysql会检查你发出的每个请求,看你是否有足够的权限实施它。比如你要更新某个表、或者查询某个表,Mysql会查看你对哪个表或者某个列是否有权限。

再比如,你要运行某个存储过程,Mysql会检查你对存储过程是否有执行权限等。

MYSQL到底都有哪些权限呢?从官网复制一个表来看看:

MYSQL进阶学习笔记十五:MySQL 的账号权限赋予!(视频序号:进阶_33,34)

MYSQL的权限如何分布,就是针对表可以设置什么权限,针对列可以设置什么权限等等,这个可以从官方文档中的一个表来说明:

MYSQL进阶学习笔记十五:MySQL 的账号权限赋予!(视频序号:进阶_33,34)

二、作用和意义:
MySQL权限系统主要用来对连接到数据库的用户进行权限的验证,以此来判断此用****户是否属于合法用户。如果是合法的用户,则赋予相应的数据库权限。

1.MySQL权限经验原则:

权限控制主要是出于安全因素,因此需要遵循一下几个经验原则:

1、只授予能满足需要的最小权限,防止用户干坏事。比如用户只是需要查询,那就只给select权限就可以了,不要给用户赋予update、insert或者delete权限。

2、创建用户的时候限制用户的登录主机,一般是限制成指定IP或者内网IP段。

3、初始化数据库的时候删除没有密码的用户。安装完数据库的时候会自动创建一些用户,这些用户默认没有密码。

4、为每个用户设置满足密码复杂度的密码。

5、定期清理不需要的用户。回收权限或者删除用户。

三、查看当前的数据库的用户
用户管理
use mysql;
查看
SELECT host,user FROM user;
四、MySQL权限应用:
1.GRANT命令使用说明:
先来看一个例子,创建一个只允许从本地登录的超级用户test,并允许将权限赋予别的用户,密码为test@feihong.111

       GRANT ALL PRIVILEGES ON *.* TO test@'localhost' IDENTIFIED BY 'test@feihong.111'
         WITH GRANT OPTION;

GRANT命令说明:

ALL PRIVILEGES 是表示所有权限,你也可以使用select、update等权限提到的权限。

ON 用来指定权限针对哪些库和表。

*.* 中前面的*号用来指定数据库名,后面的*号用来指定表名。

TO 表示将权限赋予某个用户。

feihong@'localhost' 表示feihong用户,@后面接限制的主机,可以是IP、IP段、域名以及%,%表示任何地方。注意:这里%有的版本不包括本地,

以前碰到过给某个用户设置了%允许任何地方登录,但是在本地登录不了,这个和版本有关系,遇到这个问题再加一个localhost的用户就可以了。

IDENTIFIED BY 指定用户的登录密码。

WITH GRANT OPTION 这个选项表示该用户可以将自己拥有的权限授权给别人。

注意:经常有人在创建操作用户的时候不指定WITH GRANT OPTION选项导致后来该用户不能使用GRANT命令创建用户或者给其他用户授权。

备注:可以使用GRANT重复给用户添加权限,权限叠加,比如你先给用户添加了一个select权限,然后又给用户添加了一个insert权限,那么该用户就

同时拥有了selecinsert权限。

MYSQL进阶学习笔记十五:MySQL 的账号权限赋予!(视频序号:进阶_33,34) MYSQL进阶学习笔记十五:MySQL 的账号权限赋予!(视频序号:进阶_33,34)

 1 --创建一个test1用户,密码为:test@feihong.111
 2 --可以对所有数据库操作,并可把权限赋值给其他用户
 3 GRANT ALL PRIVILEGES ON *.* 
 4     TO test1@'localhost' 
 5     IDENTIFIED BY 'test1@feihong.111'
 6 WITH GRANT OPTION;
 7 
 8 --创建一个test2用户,密码为:test@feihong.111
 9 --可以对所有数据库进行更新和删除权限,并可把权限赋值给其他用户
10 GRANT UPDATE,DELETE ON *.* 
11     TO test2@'localhost' 
12     IDENTIFIED BY 'test2@feihong.111'
13 WITH GRANT OPTION;
14 
15 
16 --创建一个test用户,密码为:test3@feihong.111
17 --可以对一个数据库中的所有表具有所有权限,并可把权限赋值给其他用户
18 GRANT ALL PRIVILEGES ON nzjj.* 
19     TO test3@'localhost' 
20     IDENTIFIED BY 'test3@feihong.111'
21 WITH GRANT OPTION;

添加用户权限测试

2.1:查看用户权限

MYSQL进阶学习笔记十五:MySQL 的账号权限赋予!(视频序号:进阶_33,34) MYSQL进阶学习笔记十五:MySQL 的账号权限赋予!(视频序号:进阶_33,34)

 1 --创建一个超级用户
 2     --创建一个只允许从本地登录的超级用户feihong,并允许将权限赋予别的用户,
 3         --密码为test@feihong.111
 4 GRANT ALL PRIVILEGES ON *.* 
 5     TO feihong@'localhost' 
 6     IDENTIFIED BY 'test@feihong.111'
 7 WITH GRANT OPTION;
 8 
 9 --创建一个网站用户(程序用户)
10     --创建一个一般的程序用户,这个用户可能只需要SELECT, INSERT, UPDATE, DELETE, 
11         --CREATE TEMPORARY TABLES等权限如果有存储过程还需要加上EXECUTE权限,一般是指定内网网段192.168.100网段。
12 GRANT  USAGE,SELECT, INSERT, UPDATE, DELETE, SHOW VIEW ,CREATE TEMPORARY TABLES,EXECUTE 
13 ON `test`.* TO webuser@'192.168.100.%' 
14 IDENTIFIED BY 'test@feihong.111';
15 
16 --创建一个普通用户(仅有查询权限)
17 GRANT USAGE,SELECT ON `test`.* TO public@'192.168.100.%' 
18 IDENTIFIED BY  'public@feihong.111';

默认数据

使用如下命令可以方便的查看到某个用户的权限:

        SHOW GRANTS FOR 'webuser'@'192.168.100.%';

2.2:删除用户

删除用户,不仅仅要删除用户的名称,还应该删除用户拥有的权限。

注意删除用户不要使用DELETE直接删除,因为使用DELETE删除后用户的权限并未删除,新建同名用户后又会继承以前的权限。正确的做法是使用DROP USER命令删除用户,

比如要删除'webuser'@'192.168.100.%'用户采用如下命令:

      ·  DROP USER 'webuser'@'192.168.100.%';

2.3:修改账号密码:

执行set password语句:

        set password for ‘账号名称’@’%’=password(’新密码’);

2.4:对账号权限的资源设置:

例如:创建一个zl账号,在mzjj数据库中具有SELECT权限,在每个小时查询的次数小于5次,最多同时有6个用户进行并发连接:

MYSQL进阶学习笔记十五:MySQL 的账号权限赋予!(视频序号:进阶_33,34) MYSQL进阶学习笔记十五:MySQL 的账号权限赋予!(视频序号:进阶_33,34)

1 GRANT SELECT ON mzjj.* TO zl@'localhost' 
2     IDENTIFIED BY '123456'
3 WITH max_queries_per_hour 5 max_user_connections 6;
4 --查看用户名,每小时查询次数,最多连接数
5 SELECT user,max_questions,max_connections FROM user WHERE user='zl';

对账号权限资源测试

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这