zoukankan      html  css  js  c++  java
  • MYSQL-用户管理

    一、用户名@白名单

    MySQL支持用户名@白名单的方式连接,有以下几种方式:

    链接方式描述备注
    wordpress@'10.0.0.%' 只允许10网段连接 常用
    wordpress@'%' 所有地址  
    wordpress@'10.0.0.200' 只允许某一个地址链接  
    wordpress@'localhost' 只允许本地连接  
    wordpress@'db03' 只允许别名是db03连接  
    wordpress@'10.0.0.5%' 只允许IP地址末尾51~59的连接  
    wordpress@'10.0.0/255.255.254.0' 只允许254这个网段的连接

    白名单用户管理操作:

    mysql> create user zhangkai@'localhost' identified by '123';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select user,host from mysql.user;
    +---------------+-----------+
    | user          | host      |
    +---------------+-----------+
    | mysql.session | localhost |
    | mysql.sys     | localhost |
    | root          | localhost |
    | zhangkai      | localhost |
    +---------------+-----------+
    4 rows in set (0.00 sec)
    
    mysql> alter user zhangkai@'localhost' identified by '1234';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> drop user zhangkai@'localhost';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select user,host from mysql.user;
    +---------------+-----------+
    | user          | host      |
    +---------------+-----------+
    | mysql.session | localhost |
    | mysql.sys     | localhost |
    | root          | localhost |
    +---------------+-----------+
    3 rows in set (0.00 sec)

    上面示例演示了白名单用户的增删改查的操作。不过这个白名单用户仅能用来登录到MySQL,权限有限!

    二、 权限管理

    1.1 常用的权限

    ALL:
    SELECT,INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, 
    PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, 
    CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, 
    REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, 
    CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE
    ALL : 以上所有权限,一般是普通管理员拥有的
    with grant option:超级管理员才具备的,给别的用户授权的功能

    1.2 创建用户并授权

    mysql> grant all on database_name.* to zhangkai@'localhost' identified by '123';
    -- grant:授权命令
    -- all:权限
    -- on:为什么对象设置权限
    -- database_name.*:database_name库下的所有表;需要注意的是,database_name库如果不存在,该语句也能执行
    -- zhangkai@'localhost':指定的用户
    -- 修改权限还是使用grant命令来做,grant命令可以反复使用

    一般的,应用用户的权限应该是有限的,常用的也就是select insert update delete

    PS:在MySQL8.0之后,grant命令有了新特性:

    • 创建用户和授权分开
    • grant命令不再支持创建用户,也不支持修改密码
    • 授权之前,必须要创建用户

    也就是,以后创建用户和授权操作要分开来做。
    另外,权限范围有几种写法:

    权限描述备注
    *.* 所有库下的所有表,使用与管理员用户  
    wordpress.* 指定库下的所有表,适用于开发和应用用户  
    wordpress.t1 指定库下的指定表,用的不多

    1.3 查看用户的权限信息和回收权限

    -- 查看用户权限
    show grants for zhangkai@'localhost';
    -- 回收权限
    revoke delete,drop on database@table from zhangkai@'localhost';

    关于查看用户权限,需要补充一些内容

    1. 之前提过,使用create user root@'%' identified by '123'创建的用户,仅能用来登录MySQL,别的啥也干不了。
    mysql> show grants for root@'192.168.85.%';
    +---------------------------------------------+
    | Grants for root@192.168.85.%                |
    +---------------------------------------------+
    | GRANT USAGE ON *.* TO 'root'@'192.168.85.%' |
    +---------------------------------------------+
    1 row in set (0.00 sec)

    正如上例的关键字USAGE表示该用户只有登录MySQL权限。想要别的权限,需要自己用有grant权限的账号为该账号授权,因为这个账号此时也没有授权这个权限

    1. 关于WITH GRANT OPTION,当你查看权限时,发现账号拥有ALL权限外,还有WITH GRANT OPTION权限。
    mysql> show grants for root@'localhost';
    +---------------------------------------------------------------------+
    | Grants for root@localhost                                           |
    +---------------------------------------------------------------------+
    | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
    | GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION        |
    +---------------------------------------------------------------------+
    2 rows in set (0.00 sec)

    WITH GRANT OPTION表示该用户可以将自己拥有的权限授权给别人。

    注意,如果在授权时没有加WITH GRANT OPTION参数,就表示该账户的权限只能自己用,而不能赋予别人,所以你在授权时要考虑好加不加WITH GRANT OPTION参数。

    grant all on *.* to root@'%' identified by '123';
    grant all on *.* to root@'%' identified by '123' with grant option;

    也就是,上面两条命令你要事情况而选择

    三、本地管理员用户密码忘记了

    解决思路是:

    1. 关闭MySQL服务
    2. mysqld_safe模式启动,即关闭MySQL的用户密码验证模块,也就是不加载授权表,然后禁止远程连接,仅能通过本地socket链接
    3. 无密码登登录到MySQL
    4. 修改密码
    5. 重启MySQL

    流程:

    [root@cs mysql]# systemctl stop mysqld
    [root@cs mysql]# mysqld_safe --skip-grant-tables --skip-networking &
    [root@cs mysql]# mysql
    Welcome to the MySQL monitor.  Commands end with ; or g.
    Your MySQL connection id is 3
    Server version: 5.7.20 MySQL Community Server (GPL)
    
    Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> alter user root@'localhost' identified by '123';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> exit;
    Bye
    [root@cs mysql]# pkill mysqld
    [root@cs mysql]# systemctl start mysqld

    相关参数解释

    • --skip-grant-tables:关闭授权表,这样就可以无验证登录了。
    • --skip-networking:关闭TCP/IP,该参数的目的是只能本地通过socket连接登录,保证修改密码时的安全性。
    • &是后台执行。
    • 至于在修改密码前的flush privileges操作是因为修改密码还是要使用授权表,但是由于mysqld_safe模式启动授权表没有从磁盘加载到内存,所以直接执行alter命令会失败,所以要使用flush privileges命令将授权表加载到内存中,才能修改密码成功
  • 相关阅读:
    POJ 2236
    HDU 6027
    FZU 2278
    FZU 2282
    python之----------字符编码的原理
    python可变数据类型和不可变数据类型
    python的运算符和while循环
    python之字符串的切片
    python数据类型补充
    python的数据类型
  • 原文地址:https://www.cnblogs.com/yj0405/p/14751954.html
Copyright © 2011-2022 走看看