MySQL系列之六 用户与授权

作者:生生不息.连绵不绝 时间:2024-01-28 05:37:31 

目录
  • 系列教程

  • 一、用户管理

    • 1、用户账号

    • 2、增加删除账号

    • 3、破解管理账号密码

  • 二、授权管理

    • 1、授权

    • 2、查询授权

    • 3、收回授权

  • 总结

    系列教程

    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字段的查询权限

    来源:https://www.cnblogs.com/L-dongf/p/9159597.html

    标签:mysql,用户,授权
    0
    投稿

    猜你喜欢

  • 一段ASP的HTTP_REFERER判断代码

    2011-03-25 10:41:00
  • 一个滑动展示的小代码

    2011-07-01 12:58:05
  • php防止sql注入之过滤分页参数实例

    2023-07-21 10:02:40
  • 用Python实现数据筛选与匹配实例

    2023-01-13 15:31:42
  • python 实现定时任务的四种方式

    2023-06-28 14:37:27
  • Python中实现单例模式的n种方式和原理

    2021-01-07 20:45:58
  • Python中的特殊语法:filter、map、reduce、lambda介绍

    2021-04-26 12:39:57
  • MySQL查询全部数据集结果不一致问题解决方案

    2024-01-21 23:51:20
  • Python 多个图同时在不同窗口显示的实现方法

    2022-07-02 01:20:35
  • 详解Python调用系统命令的六种方法

    2023-11-20 02:22:36
  • 浅谈MySQL中四种常用存储引擎

    2024-01-23 00:10:29
  • ASP.NET教程第一讲 ASP.NET简介

    2007-08-07 11:50:00
  • 如何获取当前 select 元素的值

    2010-03-29 13:07:00
  • Java正则表达式的基本用法和实例大全

    2023-04-14 06:17:22
  • 使用layui 的layedit定义自己的toolbar方法

    2023-08-24 16:21:43
  • Dreamweaver制作网页幻灯片效果

    2010-07-06 13:48:00
  • 关于jupyter lab安装及导入tensorflow找不到模块的问题

    2023-05-13 18:03:32
  • Python实现动态图解析、合成与倒放

    2022-09-22 12:53:23
  • 如何自己制作验证码的head.fix和body.fix文件

    2009-06-01 12:50:00
  • python上传时包含boundary时的解决方法

    2021-03-28 08:28:54
  • asp之家 网络编程 m.aspxhome.com