MySQL用户管理

MySQL用户管理

  • 用户管理
  • 用户
    • 用户信息
    • 创建用户
    • 删除用户
    • 修改用户密码
  • 数据库权限
    • 给用户搜权
    • 回收权限

用户管理

如果我们只能使用root用户,这样存在安全隐患。这时,就需要使用MySQL的用户管理。
MySQL用户管理_第1张图片

用户

用户信息

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

我们接着来看看,user表中当前用户信息:
由于user表中的字段太多了,我们就挑几个关键字段看一看:
MySQL用户管理_第3张图片
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' ;
MySQL用户管理_第4张图片
其中:使用create user语句创建出来的用户是没有任何权限的,只能通过我们后面的DCL语句来进行赋权;
MySQL用户管理_第5张图片
这样我们就创建出来了一个新用户,这样的话,我们就能在远程进行登录了:
MySQL用户管理_第6张图片
如果我们觉得让’cxk’用户进行远程登录比较危险的话,我们可以将‘cxk’用户的登录方式改为’localhost’或者’127.0.0.1’限制其本地登录:
我们直接使用update语句就可以了:
update user set Host='127.0.0.1' where User<=> 'cxk';
MySQL用户管理_第7张图片
为了谨防设置未生效,我们可以使用flush privileges;将更新结果刷新一下;
在这里插入图片描述
我们可以看到,但是给我们再次进行远程登录的时候就报错了;
我们再来接着试一试本地登录:
MySQL用户管理_第8张图片

删除用户

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

修改用户密码

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

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

数据库权限

MySQL数据库提供的权限列表:
MySQL用户管理_第14张图片

给用户搜权

我们知道,我们使用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用户是没有任何权限的,因此他看不到任何数据库,除了系统那个公共数据库:
MySQL用户管理_第15张图片
通过对比我们可以发现,cxk用户在没有任何权限的情况下,看到的数据库是极其有限的!
为此,我们可以使用grant语句来进行赋权:
MySQL用户管理_第16张图片

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

在root身份下我们可以查看指定用户的权限信息:
语法:
show grants for 'user'@''host;
MySQL用户管理_第19张图片

回收权限

语法:
revoke 权限列表 on 库.表 from 'cxk'@'host';
eg:
回收cxk的删除权限:
revoke delete on test.exam_result from 'cxk'@'localhost';
MySQL用户管理_第20张图片

你可能感兴趣的:(MySQL,mysql)