• MySQL 用户权限和远程访问设置


    一、用户操作

    先要使用root用户登录MySQL后在执行后面操作

    查看当前拥有用户

    SELECT host,user,Grant_priv,Super_priv FROM mysql.user;
    
    • 1

    在这里插入图片描述
    这里可以看到有两个root用户,但是运行访问host不同,一个host为localhost只能本地访问,一个host为%对所有ip开放访问。

    创建用户

    # 语法
    CREATE USER '用户名'@'host' IDENTIFIED BY '你的密码';
    # 例:
    # 创建test_01用户,赋予所有IP连接权限
    # 如果只想给某个IP使用可以写成127.0.0.1,如果想给某个网段使用可以写成192.168.0.%,%代表全部
    CREATE USER 'test_01'@'%' IDENTIFIED BY '123456';
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    修改用户密码

    # MySQL8.0
    ALTER USER '用户名'@'host' IDENTIFIED BY '新密码' PASSWORD EXPIRE NEVER;
    # MySQL8.0之前版本
    SET password FOR '用户名'@'host' = password('新密码');
    
    • 1
    • 2
    • 3
    • 4

    删除用户

    # 语法
    DROP USER '用户名'@'host';
    # 例:
    # 删除用户名称为test_01 host为%的用户
    DROP USER 'test_01'@'%';
    
    • 1
    • 2
    • 3
    • 4
    • 5

    给root用户开放外网访问

    # 创建一个能被全部IP访问的root用户,MySQL相同用户名称但是host不同代表的是两个不同用户
    CREATE USER 'root'@'%' IDENTIFIED BY '你的密码';
    # 赋予'root'@'%' 用户全部权限,和授权于下一个人用户权限的能力
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
    
    • 1
    • 2
    • 3
    • 4

    二、用户权限操作

    授予权限的原则

    (1)只授予能满足需要的最小权限 ,防止用户干坏事。比如用户只是需要查询,那就只给 select 权限就可以了,不要给用户赋予update 、 insert 或者 delete 权限

    (2)创建用户的时候限制用户的登录主机 ,一般是限制成指定 IP 或者内网IP 段。

    (3)为每个用户设置满足密码复杂度的密码 。

    (4)定期清理不需要的用户 ,回收权限或者删除用户。

    # 授权语法:
    # 没有with GRANT option,被授权者无法授权于下一个人用户
    GRANT 权限列表 on 库名.表名 to '用户名'@'主机' [with GRANT option];
    
    • 1
    • 2
    • 3
    mysql用户常用权限列表说明
    ALL 或者ALL PRIVILEGES授予用户所有权限
    CREATE授予用户创建新数据库和表的权限
    DROP授予用户删除数据库和表的权限
    DELETE授予用户删除表中的行的权限
    ALTER授予用户修改表结构的权限
    INSERT授予用户在表中插入行(add)的权限
    SELECT授予用户运行select命令以从表中读取数据的权限
    UPDATE授予用户更新表中的数据的权限

    查看授予用户的权限

    # 语法
    SHOW GRANTS FOR '用户名'@'host';
    
    # 例:查看用户名root host为%
    SHOW GRANTS FOR 'root'@'%';
    
    • 1
    • 2
    • 3
    • 4
    • 5

    给用户添加权限

    添加权限后最好执行一下刷新权限操作 FLUSH PRIVILEGES;,避免添加权限后生效不及时

    # 语法
    GRANT 权限类型 ON.TO '用户名'@'host';
    
    # 例1:给用户test_01 host为%的用户赋予全部权限和所有的库所有的表
    GRANT ALL PRIVILEGES ON *.* TO 'test_01'@'%';
    # 例2:给用户test_01 host为%的用户赋予全部权限和所有的库所有的表,并且赋予具有授予下一个人权限的权利的授权
    GRANT ALL PRIVILEGES ON *.* TO 'test_01'@'%' WITH GRANT OPTION;
    # 例3:给用户test_02 host为%的用户赋予指定权限和指定库指定表
    GRANT SELECT,INSERT ON test_02_db.test_02_table TO 'test_01'@'%';
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    回收权限

    # 语法
    REVOKE 权限类型 ON 数据库.FROM '用户名'@'host';
    
    # 例1:回收赋权权限
    REVOKE GRANT OPTION ON *.* FROM 'test_01'@'%';
    # 例1:回收用户所有库所有权限,不包含赋权权限
    REVOKE ALL PRIVILEGES ON *.* FROM 'test_01'@'%';
    # 例2:回收用户所有库的新增和修改权限
    REVOKE INSERT,UPDATE ON *.* FROM 'test_01'@'%';
    # 例3:回收用户指定数据库全部权限,前提是在赋权时只给这个用户赋予了test_01_db库的权限
    REVOKE ALL PRIVILEGES ON test_01_db.* FROM 'test_01'@'%';
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 相关阅读:
    探索 Google Guava
    笔记1.6:计算机网络发展历史
    js数组排序的六种方法
    SpringBoot
    有效的括号(栈的高频面试题)
    业务数据分析最佳案例!旅游业数据分析!⛵
    第十章 设置结构化日志记录(二)
    TDesign的input标签
    SPI通信总线基本概念
    Jetpack:009-kotlin中的lambda、匿名函数和闭包
  • 原文地址:https://blog.csdn.net/weixin_44606481/article/details/133302389