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 相关文章推荐
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
Apr 05 MySQL
MySql新手入门的基本操作汇总
May 13 MySQL
MySql存储过程之逻辑判断和条件控制
May 26 MySQL
MySQL通过binlog恢复数据
May 27 MySQL
探究Mysql模糊查询是否区分大小写
Jun 11 MySQL
一条慢SQL语句引发的改造之路
Mar 16 MySQL
Mysql如何实现不存在则插入,存在则更新
Mar 25 MySQL
聊聊mysql都有哪几种分区方式
Apr 13 MySQL
Mysql开启外网访问
May 15 MySQL
MySql如何将查询的出来的字段进行转换
Jun 14 MySQL
MySQL中LAG()函数和LEAD()函数的使用
Aug 14 MySQL
MySQL实现用逗号进行拼接、以逗号进行分割
Dec 24 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
PHP中使用TCPDF生成PDF文档实例
2014/07/01 PHP
php数组指针操作详解
2017/02/14 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
PHP的Trait机制原理与用法分析
2019/10/18 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
window.open的页面如何刷新(父页面)上层页面
2012/12/28 Javascript
JavaScript 在网页上单击鼠标的地方显示层及关闭层
2012/12/30 Javascript
Extjs中通过Tree加载右侧TabPanel具体实现
2013/05/05 Javascript
浅析onsubmit校验表单时利用ajax的return false无效问题
2013/07/10 Javascript
FireBug 调试JS入门教程 如何调试JS
2013/12/23 Javascript
jQuery取id有.的值的方法
2014/05/21 Javascript
JavaScript获取文本框内选中文本的方法
2015/02/20 Javascript
js中class的点击事件没有效果的解决方法
2016/10/13 Javascript
JavaScript正则表达式简单实用实例
2017/06/23 Javascript
layer更改皮肤的实现方法
2019/09/11 Javascript
vue项目创建步骤及路由router
2020/01/14 Javascript
解决vue-pdf查看pdf文件及打印乱码的问题
2020/11/04 Javascript
[01:01:13]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第三场
2018/04/06 DOTA
Python脚本暴力破解栅栏密码
2015/10/19 Python
python读取oracle函数返回值
2016/07/18 Python
python实现字符串连接的三种方法及其效率、适用场景详解
2017/01/13 Python
Tensorflow tf.nn.atrous_conv2d如何实现空洞卷积的
2020/04/20 Python
Python经纬度坐标转换为距离及角度的实现
2020/11/01 Python
pip install命令安装扩展库整理
2021/03/02 Python
SOA的常见陷阱或者误解是什么
2014/10/05 面试题
公安局班子个人对照检查材料思想汇报
2014/10/09 职场文书
婚礼女方父母答谢词
2015/01/04 职场文书
2015年上半年党建工作总结
2015/03/30 职场文书
2015年小学校长工作总结
2015/05/19 职场文书
2015年秋季运动会广播稿
2015/08/19 职场文书
公司董事任命书
2015/09/21 职场文书
解决SpringBoot跨域的三种方式
2021/06/26 Java/Android
Redis 彻底禁用RDB持久化操作
2021/07/09 Redis
详解MySQL中timestamp和datetime时区问题导致做DTS遇到的坑
2021/12/06 MySQL
聊聊Python String型列表求最值的问题
2022/01/18 Python
解决Mysql多行子查询的使用及空值问题
2022/01/22 MySQL