在mysql维护工作中,做好权限管理是一个很重要的环节。下面对mysql权限操作进行梳理:

mysql的权限命令是grant,权限撤销的命令时revoke;

grant授权格式:grant 权限列表 on 库.表 to 用户名@'ip' identified by "密码";

revoke回收权限格式:revoke 权限列表 on 库.表 from 用户名@'ip';

下面通过一些例子说明:

1.grant授权

1)grant 普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利。

mysql> grant all on *.* to wang@'192.168.1.150' identified by "password"; //all等同于all privilege,其中的privileges可以省略

mysql> grant all privileges on *.* to wang@'192.168.1.%' identified by "123456"; //192.168.1.%表示一个网段

mysql> grant insert,select,update,delete,drop,create,alter on huanqiu.* to wang@'%' identified by "123456";

mysql> flush privileges //授权之后,不要忘记更新权限表

2.查看权限

1)查看当前用户下所有的权限

mysql> show grants;

+----------------------------------------------------------------------------------------------------------------------------------------+

| Grants for root@localhost |

+----------------------------------------------------------------------------------------------------------------------------------------+

| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' WITH GRANT OPTION |

| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |

+----------------------------------------------------------------------------------------------------------------------------------------+

2 rows in set (0.00 sec)

2)查看指定用户下的所有权限

USAGE是默认的初始状态,表示无任何权限!!

下面表示wang用户在192.168.1.0/24网段登陆本机mysql后,对huanqiu库下的所有表有insert,update,alter,delete,create,select的操作权限!

mysql> show grants for wang@'192.168.1.%'; //可以在select user,host,password from mysql.user执行结果中找对应的权限用户信息

+---------------------------------------------------------------------------------------------------------------+

| Grants for wang@192.168.1.% |

+---------------------------------------------------------------------------------------------------------------+

| GRANT USAGE ON *.* TO 'wang'@'192.168.1.%' IDENTIFIED BY PASSWORD '*678E2A46B8C71291A3915F92736C080819AD76DF' |

| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER ON `huanqiu`.* TO 'wang'@'192.168.1.%' |

+---------------------------------------------------------------------------------------------------------------+

2 rows in set (0.00 sec)

3.revoke撤销权限

revoke跟grant语法差不多,只需要把关键字 “to” 换成 “from” 即可,并且revoke语句中不需要跟密码设置。

注意:revoke可以回收所有权限,也可以回收部分权限。

mysql> revoke all on *.* from wang@'192.168.1.150';

mysql> revoke all privileges on *.* from wang@'192.168.1.%';

mysql> revoke insert,select,update,delete,drop,create,alter on huanqiu.* from wang@'%';

mysql> flush privileges

注意事项:

1)grant, revoke用户权限后,该用户只有重新连接MySQL数据库,权限才能生效。

2)如果想让授权的用户,也可以将这些权限grant给其他用户,那么授权时需添加选项 "grant option"!

如下设置后,那么这个wang用户连接mysql后也可以将这些权限授予其他用户。

mysql> grant insert,select,update,alter on huanqiu.* to wang@'%' identified by "123456" with grant option;

-------------------------------------------------------------------------------------------------------------------

mysql授权表一共涉及到5个表,分别是user、db、host、tables_priv和columns_priv。

这5张表的内容和用途如下:

1)user表

user表列出可以连接服务器的用户及其口令,并且它指定他们有哪种全局(超级用户)权限。在user表启用的任何权限均是全局权限,并适用于所有数据库。例如,如果你启用了DELETE权限,在这里列出的用户可以从任何表中删除记录,所以在你这样做之前要认真考虑。

2)db表

db表列出数据库,而用户有权限访问它们。在这里指定的权限适用于一个数据库中的所有表。

3)host表

host表与db表结合使用在一个较好层次上控制特定主机对数据库的访问权限,这可能比单独使用db好些。这个表不受GRANT和REVOKE语句的影响,所以,你可能发觉你根本不是用它。

4)tables_priv表

tables_priv表指定表级权限,在这里指定的一个权限适用于一个表的所有列。

5)columns_priv表

columns_priv表指定列级权限。这里指定的权限适用于一个表的特定列。

------------------------------------------------------------------------------------------------------------------

看下面一个实例:

给wang用户授权的权限太大了,现在要收回部分权限,只留给wang用户select和alter的权限。

mysql> show grants for wang@'192.168.1.%';

+---------------------------------------------------------------------------------------------------------------+

| Grants for wang@192.168.1.% |

+---------------------------------------------------------------------------------------------------------------+

| GRANT USAGE ON *.* TO 'wang'@'192.168.1.%' IDENTIFIED BY PASSWORD '*678E2A46B8C71291A3915F92736C080819AD76DF' |

| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER ON `huanqiu`.* TO 'wang'@'192.168.1.%' |

+---------------------------------------------------------------------------------------------------------------+

2 rows in set (0.00 sec)

mysql> revoke insert,update,delete,create on huanqiu.* from wang@'192.168.1.%';

Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

mysql> show grants for wang@'192.168.1.%';

+---------------------------------------------------------------------------------------------------------------+

| Grants for wang@192.168.1.% |

+---------------------------------------------------------------------------------------------------------------+

| GRANT USAGE ON *.* TO 'wang'@'192.168.1.%' IDENTIFIED BY PASSWORD '*678E2A46B8C71291A3915F92736C080819AD76DF' |

| GRANT SELECT, ALTER ON `huanqiu`.* TO 'wang'@'192.168.1.%' |

+---------------------------------------------------------------------------------------------------------------+

2 rows in set (0.00 sec)

发现revoke回收权限操作后,只剩下select和alter权限了。

revoke回收部分权限,剩下的权限的密码保持不变。

这里特别注意下:

如果给一个用户设置的权限过大,除了上面使用revoke回收部分权限外,还可以使用grant进行权限修改!

也就是说,grant不仅可以添加权限,也可以修改权限(实际上就是对同一'用户名'@'ip'设置权限,以覆盖之前的权限);

grant修改后的权限将覆盖之前的权限!

那么问题来了:授权后的密码是密文形式保存的,如果记不住之前授权时的密码,那么怎样保证覆盖后的权限跟之前的权限一致?

莫慌!

grant授权操作中其实不仅可以设置明文密码,也可以设置密文密码,如下:

1)grant 权限列表 on 库.表.* to 用户名@'ip' identified by "明文密码"

2)grant 权限列表 on 库.表.* to 用户名@'ip'identified by password "密文密码"

也就是说:

在grant重置权限的时候可以用查看的密文密码当做新的密码,然后去覆盖之前的权限,这就保证了修改前后的密码一致!

如上的例子,采用grant的操作如下:

mysql> show grants for wang@'192.168.1.%';

+---------------------------------------------------------------------------------------------------------------+

| Grants for wang@192.168.1.% |

+---------------------------------------------------------------------------------------------------------------+

| GRANT USAGE ON *.* TO 'wang'@'192.168.1.%' IDENTIFIED BY PASSWORD '*678E2A46B8C71291A3915F92736C080819AD76DF' |

| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER ON `huanqiu`.* TO 'wang'@'192.168.1.%' |

+---------------------------------------------------------------------------------------------------------------+

2 rows in set (0.00 sec)

mysql> grant alter,select on huanqiu.* to wang@'192.168.1.%' identified by password '*678E2A46B8C71291A3915F92736C080819AD76DF';

Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

mysql> show grants for wang@'192.168.1.%';

+---------------------------------------------------------------------------------------------------------------+

| Grants for wang@192.168.1.% |

+---------------------------------------------------------------------------------------------------------------+

| GRANT USAGE ON *.* TO 'wang'@'192.168.1.%' IDENTIFIED BY PASSWORD '*678E2A46B8C71291A3915F92736C080819AD76DF' |

| GRANT SELECT, ALTER ON `huanqiu`.* TO 'wang'@'192.168.1.%' |

+---------------------------------------------------------------------------------------------------------------+

2 rows in set (0.00 sec)

通常开发同事在让运维同事开通mysql权限时,他们会在自己本地mysql里生成一个密文密码,然后把这个密文密码给运维同事,运维同事在用这个密文密码进行授权,

那么授权的密码就只有开发同事自己知道了,其他人都不知道!比较安全的一种做法~

mysql 授权与回收权限_MySQL 操作命令梳理(4)-- grant授权和revoke回收权限相关推荐

  1. mysql操作命令梳理(4)-grant授权和revoke回收权限

    在mysql维护工作中,做好权限管理是一个很重要的环节.下面对mysql权限操作进行梳理: mysql的权限命令是grant,权限撤销的命令时revoke: grant授权格式:grant 权限列表  ...

  2. mysql 授权是哪一个表_MySQL授权系统的五个表

    MySQL授权系统是由数据库中的五个表来实现,下面就为您详细介绍这五个和MySQL授权系统相关的表,如果您感兴趣的话,不妨一看. MySQL服务器的特点之一是,它在控制每个用户行为方面提供了极大的灵活 ...

  3. mysql授权某一列_mysql 数据库授权(给某个用户授权某个数据库)【转载】

    先设置该用户只有show database权限 grant select,insert,update,delete on redmine1.* tojira@"%" identif ...

  4. MySQL授权修改表结构_MySQL创建修改表结构

    一.数据库的概述 1.什么是数据库 DB,DataBase 数据库:依照某种数据模型进行组织并存放到存储器的数据集合 DBMS,DataBase Management System 数据库管理系统:用 ...

  5. MySQL命令梳理_MySQL操作命令梳理(2)

    一.表操作 在mysql运维操作中会经常使用到alter这个修改表的命令,alter tables允许修改一个现有表的结构,比如增加或删除列.创造或消去索引.改变现有列的类型.或重新命名列或表本身,也 ...

  6. mysql alter更新_MySQL 操作命令梳理(2)-alter(update、insert)

    在mysql运维操作中会经常使用到alter这个修改表的命令,alter tables允许修改一个现有表的结构,比如增加或删除列.创造或消去索引.改变现有列的类型.或重新命名列或表本身,也能改变表的注 ...

  7. MySQL命令梳理_MySQL操作命令梳理(1)

    一.索引 1.创建索引 索引的创建可以在CREATE TABLE语句中进行,也可以单独用CREATE INDEX或ALTER TABLE来给表增加索引.以下命令语句分别展示了如何创建主键索引(PRIM ...

  8. mysql 安装 权限_MySQL的安装、使用及权限管理

    一.数据库安装及管理 1. 安装 需安装mysql客户端和服务器端.Centos下,可用命令:yum install mysql安装mysql客户端:使用命令:yum install mysql-se ...

  9. mysql里两个闪电_mysql命令小结

    MySQL 数据库常用命令 1.MySQL常用命令 create database name; 创建数据库 use databasename; 选择数据库 drop database name 直接删 ...

最新文章

  1. LeetCode: 150:逆波兰表示法求值。
  2. 探索式软件测试—Exploratory Software Testing
  3. 音视频技术开发周刊 | 137
  4. java初始化虚拟机错误_VM初始化期间发生错误;无法为对象堆保留足够的空间;无法创建Java虚拟机...
  5. C# JsonHelper
  6. 专业摄影旗舰!vivo X30系列正式发布:支持60倍超级变焦
  7. 2021年中国车轮电机市场趋势报告、技术动态创新及2027年市场预测
  8. kubernetes 应用快速入门
  9. win10 桌面背景最短切换时间由1分钟改为10秒
  10. matlab双峰滤波,MATLAB中的单峰或双峰分布
  11. 【预测模型】预测某地区未来 20 年的人口结构变化趋势(灰色预测模型)
  12. 树莓派3B和3B+的串口使用(附图)
  13. Nginx配置ssl证书详细步骤
  14. Reactor模式详解(转)
  15. 10 模拟SPI驱动PS2无线手柄
  16. https 是什么意思?
  17. 【java】函数式接口和Stream
  18. 阿里云服务器(ECS)优惠券领取
  19. 组态王能直接读取仪表数据吗_通过组态王把智能仪表里的数据传给PLC和触摸屏...
  20. ESP32学习笔记(48)——WiFi蓝牙网关

热门文章

  1. go加载python_python培训 | python调用go语言来提速
  2. java 阻塞 socket_java socket非阻塞I/O
  3. python中发送带附件的邮件,python SMTP实现发送带附件电子邮件
  4. 三星s7不能运行java_在调试模式下启动时Android应用程序崩溃
  5. java汽车管理系统_坑爹!花费2亿耗时2年,网站没建完Java都写不好,顶级咨询公司埃森哲被告上法庭...
  6. Java中的Unsafe
  7. 怎么解决缺少java.doc_java 生成doc帮助文档时出现的问题
  8. java调用hbase_Java调用Hbase
  9. 计算机应用基础 辅助教学系统,计算机应用基础课程辅助教学及智能测评系统使用手册——网络版.docx...
  10. 资阳停车场系统推荐_详细讲解停车场管理车牌识别系统安装