• MySQL用户管理


    用户管理

    如果我们只能使用root用户,这样存在安全隐患。这时,就需要使用MySQL的用户管理。
    在这里插入图片描述

    用户

    用户信息

    MySQL中的用户,都存储于MySQL系统数据库 ‘mysql’ 的 ‘user’ 表中,user,本质上也是一张表,我们也可以利用CURD操作对其进行操作:
    看一看user表中的属性信息:
    在这里插入图片描述
    其中User和Host字段作为user表的复合主键;
    为此,我们想要准确定位user表中一个用户的信息的话,我们只需要告诉user表,我们要查询的用户的用户名和Host;

    我们接着来看看,user表中当前用户信息:
    由于user表中的字段太多了,我们就挑几个关键字段看一看:
    在这里插入图片描述
    User: 就表示用户名,其中mysql.sys和mysql.session用户已经被锁定,无法进行客户端登录;root账号进行用户管理;
    Host: ip字段,该字段表示规定了客户端的登录方式,localhost或’127.0.0.1’表示该用户只能从本地登录;'%'表示改用户可以从任意ip登录;‘特定ip’:表示用户只能从该ip地址的主机登录;
    一般情况下,我们的MySQL服务是不会暴露在公网上的,因为不安全,有可能遭受黑客攻击,因此我们的MySQL中的用户一般只允许本地登录,如果实在要进行远程登录,那么也必须限制为特定ip登录;
    authentication_string: 用户密码通过password函数加密后的数据
    *_priv: 用户拥有的权限

    创建用户

    本质上user也是一张表,我们使用CURD操作也是可以添加用户的,但是我们通过查阅user表结构就知道,user表有太多属性了,如果我们使用insert的话,那么我们的手都得写麻;
    为此,如果想要新增一个用户的话,我们可以使用一下语句:
    语法:
    create user '用户名' @ 'host' identified by '密码';
    eg:
    创建一个:'cxk’用户,允许其从任意ip登录:
    create user 'cxk' @ '%' identified by 'cxk123456' ;
    在这里插入图片描述
    其中:使用create user语句创建出来的用户是没有任何权限的,只能通过我们后面的DCL语句来进行赋权;
    在这里插入图片描述
    这样我们就创建出来了一个新用户,这样的话,我们就能在远程进行登录了:
    在这里插入图片描述
    如果我们觉得让’cxk’用户进行远程登录比较危险的话,我们可以将‘cxk’用户的登录方式改为’localhost’或者’127.0.0.1’限制其本地登录:
    我们直接使用update语句就可以了:
    update user set Host='127.0.0.1' where User<=> 'cxk';
    在这里插入图片描述
    为了谨防设置未生效,我们可以使用flush privileges;将更新结果刷新一下;
    在这里插入图片描述
    我们可以看到,但是给我们再次进行远程登录的时候就报错了;
    我们再来接着试一试本地登录:
    在这里插入图片描述

    删除用户

    同理,这里我们也可以利用CURD操作,我们就不说了
    我们使用另一个语法:
    drop user '用户名'@'host';
    eg:
    我们现在要删除cxk用户
    drop user 'cxk'@'127.0.0.1';
    在这里插入图片描述

    修改用户密码

    语法:
    set password=password('密码');//修改当前用户自己的密码
    语法:
    set password for 'user'@'host' =password('密码');//root用户修改指定用户的密码

    为了方便测试,我们还是将’cxk’用户请回来:
    create user 'cxk'@'localhost' identified by 'cxk123456';
    在这里插入图片描述
    以cxk用户的身份登录mysqld服务器:
    在这里插入图片描述
    cxk用户修改自己的密码:
    在这里插入图片描述
    当然作为管理者root也是可以修改他所管理的成员的密码信息的:
    set password for 'cxk'@'localhost'=password('cxk123456');
    在这里插入图片描述

    数据库权限

    MySQL数据库提供的权限列表:
    在这里插入图片描述

    给用户搜权

    我们知道,我们使用create user语句创建出来的用户是没有任何权限的,没有任何权限也就意味着该用户干不了任何事情,这肯定不是我们想要的,为此我们需要给用户一定的权限,在MySQL中于权限相关的语句叫做DCL语句;

    给用户授权:
    grant 权限列表 on 数据库.表 to 'user' @'host' [identified by '密码'];

    注意:

    1. 权限列表如果有多个,可以使用逗号隔开;
    2. 如果要给用户操作的当前数据库下的所有表,那么可以给在 ‘数据库.表’ 这里我们可以这样写:
      '数据库.* ’
    3. 如果我们像要给某个用户赋予所有权限,我们只需要grant all on 数据库.表 to 'user'@'host';
    4. identified by可选。 如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就是创建用户;

    eg:当前的cxk用户是没有任何权限的,因此他看不到任何数据库,除了系统那个公共数据库:
    在这里插入图片描述
    通过对比我们可以发现,cxk用户在没有任何权限的情况下,看到的数据库是极其有限的!
    为此,我们可以使用grant语句来进行赋权:
    在这里插入图片描述

    我们该cxk用户赋予test数据库下的exam_result表的读权限:
    grant select on test.exam_result to 'cxk'@'localhost';
    在这里插入图片描述
    在这里插入图片描述
    现在,我们cxk用户想要删除exam_result表中的所有数据:
    在这里插入图片描述
    系统提示我们没有删除权限,我们可以给cxk用户赋予删除权限;
    grant delete on test.exam_result to 'cxk'@'localhost';
    在这里插入图片描述

    在root身份下我们可以查看指定用户的权限信息:
    语法:
    show grants for 'user'@''host;
    在这里插入图片描述

    回收权限

    语法:
    revoke 权限列表 on 库.表 from 'cxk'@'host';
    eg:
    回收cxk的删除权限:
    revoke delete on test.exam_result from 'cxk'@'localhost';
    在这里插入图片描述

  • 相关阅读:
    SSH 基础学习使用
    PDF编辑软件pdf转word工具Acrobat DC百度云盘分享
    接口管理测试繁琐复杂?何不试试Eolink
    17. 机器学习——SVM
    JUC_锁是什么,Synchronized与Lock的区别
    文心一言 VS 讯飞星火 VS chatgpt (286)-- 算法导论21.2 5题
    2022“杭电杯”中国大学生算法设计超级联赛(4)
    1.2w+字!Java IO 基础知识总结
    批量删除docker中tag为<none>的镜像
    【FPGA教程案例89】编译码2——使用vivado核实现RS信道编译码
  • 原文地址:https://blog.csdn.net/qq_62106937/article/details/132981929