MySQL系列之六 用户与授权

 更新时间:2021年07月02日 16:43:38   作者:生生不息.连绵不绝  
做为Mysql数据库管理员管理用户账户,是一件很重要的事,指出哪个用户可以连接服务器,从哪里连接,连接后能做什么,这篇文章主要介绍了MySQL用户与授权的相关资料,需要的朋友可以参考下

系列教程

MySQL系列之开篇 MySQL关系型数据库基础概念
MySQL系列之一 MariaDB-server安装
MySQL系列之二 多实例配置
MySQL系列之三 基础篇
MySQL系列之四 SQL语法
MySQL系列之五 视图、存储函数、存储过程、触发器
MySQL系列之七 MySQL存储引擎
MySQL系列之八 MySQL服务器变量
MySQL系列之九 mysql查询缓存及索引
MySQL系列之十 MySQL事务隔离实现并发控制
MySQL系列之十一 日志记录
MySQL系列之十二 备份与恢复
MySQL系列之十三 MySQL的复制
MySQL系列之十四 MySQL的高可用实现
MySQL系列之十五 MySQL常用配置和性能压力测试

一、用户管理

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报错Table mysql.plugin doesn’t exist的解决方法

    MySql报错Table mysql.plugin doesn’t exist的解决方法

    一般产生原因是手工更改my.ini的数据库文件存放地址导致的,大家可以参考下下面的方法
    2013-02-02
  • mysql报错1033 Incorrect information in file: ‘xxx.frm’问题的解决方法

    mysql报错1033 Incorrect information in file: ‘xxx.frm’问题的解决方法

    这篇文章主要介绍了关于mysql报错1033 Incorrect information in file: 'xxx.frm'问题的解决方法,文中通过示例代码介绍的很详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-03-03
  • 浅谈mysql的子查询联合与in的效率

    浅谈mysql的子查询联合与in的效率

    本文是作者在实际产品测试中遇到的问题,继而作了相关总结,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • MySQL正则表达式regexp_replace函数的用法实例

    MySQL正则表达式regexp_replace函数的用法实例

    regexp_replace的使用非常灵活,且容易忘记,故做此笔记,下面这篇文章主要给大家介绍了关于MySQL正则表达式regexp_replace函数的用法实例,需要的朋友可以参考下
    2022-09-09
  • 通过唯一索引S锁与X锁来了解MySQL死锁套路

    通过唯一索引S锁与X锁来了解MySQL死锁套路

    毫不夸张的说,有一半以上的死锁问题由唯一索引贡献,后面介绍的很多死锁的问题都跟唯一索引有关。这次我们讲一段唯一索引 S 锁与 X 锁的案例,下面小编来和大家一起学习一下
    2019-05-05
  • 深入浅析Mysql联合索引最左匹配原则

    深入浅析Mysql联合索引最左匹配原则

    这篇文章主要介绍了Mysql联合索引最左匹配原则,使用联合索引的好处多多,具体内容详情大家跟随脚本之家小编一起学习吧
    2018-06-06
  • MySQL实现批量推送数据到Mongo

    MySQL实现批量推送数据到Mongo

    这篇文章主要为大家详细介绍了MySQL如何实现批量推送数据到Mongo,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的可以了解一下
    2023-05-05
  • MySQL创建和删除表操作命令实例讲解

    MySQL创建和删除表操作命令实例讲解

    这篇文章主要介绍了MySQL创建和删除表操作命令实例讲解,本文讲解了创建表、创建临时表、查看已经创建的mysql表等内容,需要的朋友可以参考下
    2014-12-12
  • centos 7系统下编译安装 mysql5.7教程

    centos 7系统下编译安装 mysql5.7教程

    因为Mysql5.7的更新特性还是非常多,所以这篇文章就给大家介绍以下在centos上面编译安装mysql5.7的教程。本文给大家介绍的步骤还是相对来说比较详细的,相信对大家具有一定的参考借鉴价值,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-11-11
  • MySQL数据同步到Doris的四种方式

    MySQL数据同步到Doris的四种方式

    这篇文章给大家介绍了MySQL数据同步到Doris的四种方式,CSV文件方式,JDBC 编码方式,JDBC Catalog 方式和Binlog Load 方式,并通过代码示例给大家介绍的非常详细,需要的朋友可以参考下
    2024-02-02

最新评论