MySQL系列之六 用户与授权


Posted in MySQL onJuly 02, 2021
目录
  • 一、用户管理
    • 1、用户账号
    • 2、增加删除账号
    • 3、破解管理账号密码
  • 二、授权管理
    • 1、授权
    • 2、查询授权
    • 3、收回授权
  • 总结

 

一、用户管理

 

1、用户账号

用户的账号由用户名和HOST俩部分组成('USERNAME'@'HOST')

HOST的表示:

  • 主机名
  • 具体IP地址
  • 网段/掩码

可以使用通配符表示,%和_;192.168.%即表示这个网段的所有主机

 

2、增加删除账号

主要:在数据库中修改了用户信息需要执行FLUSH PRIVILEGES;来刷新授权表使其生效

创建

MariaDB [mysql]> CREATE USER 'user1'@'192.168.%';
  MariaDB [mysql]> CREATE USER 'user2'@'192.168.%' IDENTIFIED BY 'your_password';
  MariaDB [mysql]> SELECT user,host,password FROM user;
  +-------+-----------+-------------------------------------------+
  | user  | host      | password                                  |
  +-------+-----------+-------------------------------------------+
  | root  | localhost | *4A54C3F37C03C7FBACE31591D6A8C546F93DF5C5 |
  | root  | centos7   |                                           |
  | root  | 127.0.0.1 |                                           |
  | root  | ::1       |                                           |
  |       | localhost |                                           |
  |       | centos7   |                                           |
  | user1 | 192.168.% |                                           |
  | user2 | 192.168.% | *9E72259BA9214F692A85B240647C4D95B0F2E08B |
  +-------+-----------+-------------------------------------------+

删除

MariaDB [mysql]> DROP USER user2@'192.168.%';
  MariaDB [mysql]> SELECT user,host,password FROM user;      
  +-------+-----------+-------------------------------------------+
  | user  | host      | password                                  |
  +-------+-----------+-------------------------------------------+
  | root  | localhost | *4A54C3F37C03C7FBACE31591D6A8C546F93DF5C5 |
  | root  | centos7   |                                           |
  | root  | 127.0.0.1 |                                           |
  | root  | ::1       |                                           |
  |       | localhost |                                           |
  |       | centos7   |                                           |
  | user1 | 192.168.% |                                           |
  +-------+-----------+-------------------------------------------+

重命名

MariaDB [mysql]> RENAME USER user1@'192.168.%' TO testuser@'%';
  MariaDB [mysql]> SELECT user,host,password FROM mysql.user;
  +----------+-----------+-------------------------------------------+
  | user     | host      | password                                  |
  +----------+-----------+-------------------------------------------+
  | root     | localhost | *4A54C3F37C03C7FBACE31591D6A8C546F93DF5C5 |
  | root     | centos7   |                                           |
  | root     | 127.0.0.1 |                                           |
  | root     | ::1       |                                           |
  |          | localhost |                                           |
  |          | centos7   |                                           |
  | testuser | %         |                                           |
  +----------+-----------+-------------------------------------------+

修改密码

MariaDB [mysql]> SET PASSWORD FOR testuser@'%' =PASSWORD('testpass');
  MariaDB [mysql]> SELECT user,host,password FROM mysql.user;          
  +----------+-----------+-------------------------------------------+
  | user     | host      | password                                  |
  +----------+-----------+-------------------------------------------+
  | root     | localhost | *4A54C3F37C03C7FBACE31591D6A8C546F93DF5C5 |
  | root     | centos7   |                                           |
  | root     | 127.0.0.1 |                                           |
  | root     | ::1       |                                           |
  |          | localhost |                                           |
  |          | centos7   |                                           |
  | testuser | %         | *00E247AC5F9AF26AE0194B41E1E769DEE1429A29 |
  +----------+-----------+-------------------------------------------+

其他修改密码的方法:

​ UPDATE user SET password=PASSWORD('testpass') WHERE user='testuser';
​ # mysqladmin -uroot -poldpass password 'newpass'

 

3、破解管理账号密码

空数据库的情况下恢复密码

# systemctl stop mariadb
  # rm -rf /var/lib/mysql/*  #删库跑路
  # systemctl start mariadb

有数据的情况下恢复密码

  1)在/etc/my.cnf配置文件的[mydqld]下添加skip-grant-tables和skip-networking参数

  2)# systemctl restart mariadb 重启服务

  3)执行mysql登录到数据库

  4)MariaDB [(none)]> UPDATE mysql.user SET password=PASSWORD('newpassword') WHERE user='root' AND host='localhost';  #更新密码

  5)MariaDB [(none)]> FLUSH PRIVILEGES;  #刷新授权表

  6)退出,修改配置文件,删除skip-grant-tables和skip-networking参数,重启服务
也可以在启动mysqld进程时,为其使用如下选项:

--skip-grant-tables

​ --skip-networking

 

二、授权管理

 

1、授权

​ 语法:GRANT priv_type ON [object_type] priv_level TO user@'%' [IDENTIFIED BY 'password'] [WITH GRANT OPTION];

授权时如果用户不存在则创建,所以我们一般不会单独去创建一个用户,而是授权创建一块完成。

priv_type 授权类型

- SELECT

- ​INSERT

- ​UPDATE

- ​DELETE

- ​CREATE

- ​DROP

- INDEX

- ALTER

- ​SHOW DATABASES

- ​CREATE TEMPORARY TABLES

- ​LOCK TABLES

- ​CREATE VIEW

- SHOW VIEW

- CREATE USER

- ALL PRIVILEGES 或 ALL

object_type 授权对象

- TABLE

- FUNCTION

- PROCEDURE

priv_level 授权级别

- *或*.* 表示所有库

- db_name.* 表示指定库中的所有表

- db_name.tbl_name 指定库中的指定表

- tbl_name 表示当前库的表

- db_name.routine_name 表示指定库的函数,存储过程,触发器

WITH GRANT OPTION

- MAX_QUERIES_PER_HOUR count

- MAX_UPDATES_PER_HOUR count

- MAX_CONNECTIONS_PER_HOUR count

- MAX_USER_CONNECTIONS count

MariaDB [school]> GRANT SELECT(stuid,name) ON TABLE school.students TO admin@'%' IDENTIFIED BY 'admin';  #把students表的stuid和name字段的查询权限授权于admin@'%'用户
MariaDB [school]> FLUSH PRIVILEGES;  #刷新授权表

 

2、查询授权

MariaDB [school]> SHOW GRANTS FOR admin@'%'\G  #查看指定用户的权限
*************************** 1. row ***************************
Grants for admin@%: GRANT USAGE ON *.* TO 'admin'@'%' IDENTIFIED BY PASSWORD '*4ACFE3202A5FF5CF467898FC58AAB1D615029441'
*************************** 2. row ***************************
Grants for admin@%: GRANT SELECT (stuid, name) ON `school`.`students` TO 'admin'@'%'
[root@working ~]# mysql -uadmin -padmin -h192.168.0.7
MariaDB [(none)]> SHOW GRANTS FOR CURRENT_USER()\G  #查询自己的权限
*************************** 1. row ***************************
Grants for admin@%: GRANT USAGE ON *.* TO 'admin'@'%' IDENTIFIED BY PASSWORD '*4ACFE3202A5FF5CF467898FC58AAB1D615029441'
*************************** 2. row ***************************
Grants for admin@%: GRANT SELECT (stuid, name) ON `school`.`students` TO 'admin'@'%'

 

3、收回授权

MariaDB [school]> REVOKE SELECT(stuid) ON school.students FROM admin@'%';  #收回admin@'%'用户对stuid字段的查询权限

 

总结

到此这篇关于MySQL用户与授权的文章就介绍到这了,更多相关MySQL用户与授权内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
May 06 MySQL
.Net Core导入千万级数据至Mysql的步骤
May 24 MySQL
MySQL中VARCHAR与CHAR格式数据的区别
May 26 MySQL
MySQL库表名大小写的选择
Jun 05 MySQL
mysql获取指定时间段中所有日期或月份的语句(不设存储过程,不加表)
Jun 18 MySQL
浅谈MySQL之select优化方案
Aug 07 MySQL
Mysql存储过程、触发器、事件调度器使用入门指南
Jan 22 MySQL
关于MySQL临时表为什么可以重名的问题
Mar 22 MySQL
SQL语句多表联合查询的方法示例
Apr 18 MySQL
MySQL视图概念以及相关应用
Apr 19 MySQL
分析MySQL优化 index merge 后引起的死锁
Apr 19 MySQL
mysql 8.0.27 绿色解压版安装教程及配置方法
Apr 20 MySQL
MySQL系列之开篇 MySQL关系型数据库基础概念
Jul 02 #MySQL
MySQL系列之五 视图、存储函数、存储过程、触发器
Jul 02 #MySQL
MySql 缓存查询原理与缓存监控和索引监控介绍
Jul 02 #MySQL
mysql连接查询中and与where的区别浅析
低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限
Jul 01 #MySQL
MySQL 8.0 驱动与阿里druid版本兼容问题解决
MySQL query_cache_type 参数与使用详解
Jul 01 #MySQL
You might like
实用函数8
2007/11/08 PHP
php 代码优化之经典示例
2011/03/24 PHP
php 数组动态添加实现代码(最土团购系统的价格排序)
2011/12/30 PHP
解析php DOMElement 操作xml 文档的实现代码
2013/05/10 PHP
PHP 快速排序算法详解
2014/11/10 PHP
PHP基于正则批量替换Img中src内容实现获取缩略图的功能示例
2017/06/07 PHP
PHP简单实现记录网站访问量功能示例
2018/06/06 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
php使用Swoole实现毫秒级定时任务的方法
2020/09/04 PHP
工作中常用到的JS表单验证代码(包括例子)
2010/11/11 Javascript
Javascript图像处理—平滑处理实现原理
2012/12/28 Javascript
原生javaScript做得动态表格(注释写的很清楚)
2013/12/29 Javascript
JQuery处理json与ajax返回JSON实例代码
2014/01/03 Javascript
JavaScript访问CSS属性的几种方式介绍
2014/07/21 Javascript
jQuery时间轴插件使用详解
2015/07/16 Javascript
js实现创建删除html元素小结
2015/09/30 Javascript
js实现点击每个li节点,都弹出其文本值及修改
2016/12/15 Javascript
jquery实现多次上传同一张图片
2017/01/09 Javascript
NodeJs 文件系统操作模块fs使用方法详解
2018/11/26 NodeJs
JavaScript中引用vs复制示例详析
2018/12/06 Javascript
有关vue 开发钉钉 H5 微应用 dd.ready() 不执行问题及快速解决方案
2020/05/09 Javascript
Python一句代码实现找出所有水仙花数的方法
2018/11/13 Python
python判断输入日期为第几天的实例
2018/11/13 Python
对python3 中方法各种参数和返回值详解
2018/12/15 Python
Python实现删除排序数组中重复项的两种方法示例
2019/01/31 Python
使用python3构建文件传输的方法
2019/02/13 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
2019/05/31 Python
关于python中密码加盐的学习体会小结
2019/07/15 Python
PyQt Qt Designer工具的布局管理详解
2019/08/07 Python
python写入数据到csv或xlsx文件的3种方法
2019/08/23 Python
python 已知三条边求三角形的角度案例
2020/04/12 Python
Python爬取酷狗MP3音频的步骤
2021/02/26 Python
万豪国际住宅与别墅集团:Homes & Villas by Marriott International
2020/10/08 全球购物
工程部主管岗位职责
2015/02/12 职场文书
清明节随笔
2015/08/15 职场文书
Spring Cloud OpenFeign模版化客户端
2022/06/25 Java/Android