# 权限管理

关于MySQL的权限简单的理解就是MySQL允许你做你权力以内的事情,不可以越界。比如只允许你执行SELECT操

作, 那么你就不能执行UPDATE操作。只允许你从某台机器上连接MySQL,那么你就不能从除那台机器以外的其他

机器连接MySQL.

1 权限列表

MySQL到底都有哪些权限呢?

mysql> show privileges;

(1) CREATE和DROP权限 ,可以创建新的数据库和表,或删除(移掉)已有的数据库和表。如果将 MySQL数据库中的DROP权限授予某用户,用户就可以删除MySQL访问权限保存的数据库。

(2) SELECT、INSERT、UPDATE和DELETE权限 允许在一个数据库现有的表上实施操作。

(3) SELECT权限 只有在它们真正从一个表中检索行时才被用到。

(4) INDEX权限 允许创建或删除索引,INDEX适用于已 有的表。如果具有某个表的CREATE权限,就可以在CREATE TABLE语句中包括索引定义。

(5) ALTER权 限 可以使用ALTER TABLE来更改表的结构和重新命名表。

(6) CREATE ROUTINE权限 用来创建保存的 程序(函数和程序),ALTER ROUTINE权限用来更改和删除保存的程序, EXECUTE权限 用来执行保存的 程序。

(7) GRANT权限 允许授权给其他用户,可用于数据库、表和保存的程序。

(8) FILE权限 使用 户可以使用LOAD DATA INFILE和SELECT ... INTO OUTFILE语句读或写服务器上的文件,任何被授予FILE权 限的用户都能读或写MySQL服务器上的任何文件(说明用户可以读任何数据库目录下的文件,因为服务 器可以访问这些文件)。

权限分布 可能的设置的权限
表权限 SELECT INSERT UPDATE DELETE CREATE DROP GRANT References Index Alter
列权限 SELECT INSERT UPDATE References
过程权限 Execute 'Alter Routine' Grant

2. 授予权限的原则

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

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

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

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

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

3 授予权限

给用户授权的方式有 2 种,分别是通过把 角色赋予用户给用户授权 和 直接给用户授权 。用户是数据库的 使用者,我们可以通过给用户授予访问数据库中资源的权限,来控制使用者对数据库的访问,消除安全 隐患。

授权命令:

GRANT 权限1,权限2,…权限n ON 数据库名称.表名称 TO 用户名@用户地址 [IDENTIFIED BY ‘密码口令’];

该权限如果发现没有该用户,则会直接新建一个用户。

比如:

1.给li4用户用本地命令行方式,授予atguigudb这个库下的所有表的插删改查的权限

GRANT SELECT,INSERT,DELETE,UPDATE ON atguigudb.* TO li4@localhost ;

2.授予通过网络方式登录的joe用户 ,对所有库所有表的全部权限,密码设为123。注意这里唯独不包 括grant的权限

GRANT ALL PRIVILEGES ON *.* TO joe@'%' IDENTIFIED BY '123';
  • ALL PRIVILEGES 是表示所有权限,你也可以使用SELECT、UPDATE等权限.
  • ON用来指定权限针对哪些库和表。
  • .中前面的*号用来指定数据库名,后面的*号用来指定表名。这里的*表示所有的。
  • TO表示将权限赋予某个用户。
  • li4@'localhost' 表示li4用户,@后面接限制的主机,可以是Ip、Ip段、域名以及%,%表示任何地方。注意:这里%有的版本不包括本地,以前碰到过给某个用户设置了%, 允许任何地方登录,但是在本地登录不了,这个和版本有关系,遇到这个问题再加一个localhost的用户就可以了。
  • IDENTIFIED BY 指定用户的登录密码。

如果需要授予包括GRANT的权限,添加参数WITH GRANT OPTION这个选项即可,表示该用户可以将自己拥有的权限授权给别人。经常有人在创建操作用户时候不指定WITH GRANT OPTION 选项导致后来该用户不能使用GRANT命令创建用户或者给其它用户授仅。

可以使用GRANT重复给用户添加权限,权限叠加, 比如你先给用 户添加一个SELECT权限,然后又给用户添加一个INSERT 权限,那么该用户就同时拥有了SELECT和INSERT 权限了

我们在开发应用的时候,经常会遇到一种需求,就是要根据用户的不同,对数据进行横向和纵向的 分组。

  • 所谓横向的分组,就是指用户可以接触到的数据的范围,比如可以看到哪些表的数据;

  • 所谓纵向的分组,就是指用户对接触到的数据能访问到什么程度,比如能看、能改,甚至是 删除。

4. 查看权限

查看当前用户权限

SHOW GRANTS;
# 或
SHOW GRANTS FOR CURRENT_USER;
# 或
SHOW GRANTS FOR CURRENT_USER();

查看某用户的全局权限

SHOW GRANTS FOR 'user'@'主机地址' ;

5. 收回权限

收回权限就是取消已经赋予用户的某些权限。收回用户不必要的权限可以在一定程度上保证系统的安全 性。MySQL中使用 REVOKE语句 取消用户的某些权限。使用REVOKE收回权限之后,用户账户的记录将从 db、host、tables_priv和columns_priv表中删除,但是用户账户记录仍然在user表中保存(删除user表中 的账户记录使用DROP USER语句)。

注意:在将用户账户从user表删除之前,应该收回相应用户的所有权限。

  • 收回权限命令

    REVOKE 权限1,权限2,…权限n ON 数据库名称.表名称 FROM 用户名@用户地址;
  • 举例

    #收回全库全表的所有权限
    REVOKE ALL PRIVILEGES ON *.* FROM joe@'%'; #收回mysql库下的所有表的插删改查权限
    REVOKE SELECT,INSERT,UPDATE,DELETE ON mysql.* FROM joe@localhost;

    注意: 须用户重新登录后才能生效

总结:

有一些程序员喜欢使用Root超级用户来访问数据库,完全把 权限控制 放在应用层面实现。这样当然也是可以的。

但建议大家,尽量使用数据库自己的角色和用户机制来控制访问权限,不要轻易使用Root账号。因为Root账号密码放在代码里面不安全,一旦泄露,数据库就会完全失去保护。

而且,MySQL的权限控制功能十分完善,应该尽量利用,可以提高效率,而且安全可靠。

五: Mysql权限管理的更多相关文章

  1. mysql 权限管理 目录

    mysql 权限管理介绍 mysql 权限管理 记录 mysql 权限管理 grant 命令 mysql 权限管理 revoke 回收权限 命令 mysql 权限管理 针对库 授权 db.* mysq ...

  2. mysql权限管理命令示例

    mysql权限管理命令示例 grant all privileges on *.* to *.* identified by 'hwalk1'; flush privileges; insert in ...

  3. mysql 权限管理介绍

    mysql权限管理 就是对控制用户对库.对表的权限.对表中字段权限 权限管理分步 1.创建账号 创建账号有本地账号和远程账号 本地账号 本地账号只能在mysql服务端机器做操作 '; # mysql ...

  4. MySQL权限管理、配置文件(三)

    一.MySQL权限管理 GRANT 权限 ON 授权范围 TO '用户名'@'允许的ip(所有%)' IDENTIFIED BY '用户密码'; 权限:参加下表,一般常用的是CREATE.DELETE ...

  5. MySQL权限管理(五)

    一.什么是MySQL权限 各大帖子及文章都会讲到数据库的权限按最小权限为原则,这句话本身没有错,但是却是一句空话.因为最小权限,这个东西太抽象,很多时候你并弄不清楚具体他需要哪些权限. 现在很多mys ...

  6. 转 MySQL权限管理

    ###sample: #####view all userSELECT user, host from mysql.user;mysql> SELECT user, host from mysq ...

  7. mysql权限管理

    经常遇到有网友在QQ群或者论坛上问关于mysql权限的问题,今天抽空总结一下关于这几年使用MYSQL的时候关于MYSQL数据库的权限管理的经验,也希望能对使用mysql的网友有所帮助! 一.MYSQL ...

  8. mysql 权限管理

     参考:    http://www.cnblogs.com/Richardzhu/p/3318595.html 一.MySQL权限简介 关于mysql的权限简单的理解就是mysql允许你做你全力以内 ...

  9. python之路--MySQL权限管理 数据备份还原

    一 权限管理 mysql最高管理者是root用户, 这个一般掌握在公司DBA手里, 当你想去对数据库进行一些操作的时候,需要DBA授权给你. 1. 对新用户增删改 1. 创建用户 # 要先use my ...

  10. MySQL权限管理分配

    之前一直忽视了MySQL的权限这一块的内容,以为一般般的知识点,随时用随时学就好了,导致自己这方面稍微有点不太明白的地方,总是踩坑,所以后来就总结一下: 1.MySQL权限系统的工作原理 .对连接的用 ...

随机推荐

  1. 任意文件下载包含https的图片

    使用a标签进行下载 <a href="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ. ...

  2. ffmpeg修改文件格式

    http://ffmpeg.org/ 官网下载windows版本 进这个文件夹 随便找一个格式的文件我这里以mp4 放在这个文件夹里面 然后状态栏输入cmd 输入下方命令代码 ffmpeg -i 66 ...

  3. Spring框架源码分析

    目录 Spring核心思想 Spring源码编译 自定义实现Spring框架IOC与DI Spring源码Ioc核心模块分析 BeanDefinition整体介绍 FactoryBean接口的使用 B ...

  4. 机器学习算法(四): 基于支持向量机的分类预测(SVM)

    机器学习算法(四): 基于支持向量机的分类预测 本项目链接:https://www.heywhale.com/home/column/64141d6b1c8c8b518ba97dcc 1.相关流程 支 ...

  5. 2.0 熟悉CheatEngine修改器

    Cheat Engine 一般简称为CE,它是一款功能强大的开源内存修改工具,其主要功能包括.内存扫描.十六进制编辑器.动态调试功能于一体,且该工具自身附带了脚本工具,可以用它很方便的生成自己的脚本窗 ...

  6. 构建LVS负载均衡集群

    LVS即Linux虚拟服务器,目前 LVS 已经被集成到 Linux 内核模块中,该项目在 Linux 内核实现了基于 IP 的数据请求负载均衡调度方案,LVS集群采用IP负载均衡技术和基于内容请求分 ...

  7. 基于.NET三维控件的个性化管道软件开发

    1 简介 管道广泛用于化工.工厂.建筑.市政等方面,关系到国计民生.虽然管道设计软件种类繁多,有的也非常强大(然而也非常昂贵),但也并不能完全满足个性化需要. 如何快速开发一款满足自己需求的三维管道设 ...

  8. SpringMVC的执行流程及初始化流程

    今天大致来看一下Spring MVC的执行流程和初始化流程是什么样的 1,执行流程:也就是一个请求是怎么到我们Controller的 2,初始化流程:也就是那些 HandlerMapping.Hand ...

  9. STM32 HAL库 USART DMA驱动

    前言 本文是在使用 STM32L4 的串口 DMA 功能时,使用 HAL 库出现的一些问题,通过以下方式解决了 HAL 库中存在 DMA 发送和接收的一些问题. STM32L4 的 DMA 简介 DM ...

  10. KVM环境:Active console session exists for this domain

    做测试过程中被迫换电脑,但没有关掉原电脑的连接,所以用其他电脑连接测试环境时,发现之前的kvm测试环境因没有断开,无法连接: error: operation failed: Active conso ...