【MySQL】用户管理

2023-12-16 05:02:57

一、用户

1. 用户信息

其实 MySQL 中的用户,都存储在系统数据库 mysqluser 表中,我们通过 show databases; 查看 mysql 数据库:

在这里插入图片描述

然后 use mysql; 使用该数据库,再 show tables; 查看它的表结构,我们发现里面有一张表名为 user 的表,里面存放的就是用户的信息,我们可以使用指令 select * from user 查看该表,但是由于该表太大了,所以我们筛选出重要信息,如 user:用户名host:表示这个用户可以从哪个主机登陆,如果是 localhost,表示只能从本机登陆authentication_string:用户密码通过 password 函数加密后的密码,指令为:select user, host, authentication_string from user; 如下图:

在这里插入图片描述

其中 host 列中 localhost 表示该用户只能在本地登录,不能远程登录。

2. 创建用户

语法:create user '用户名'@'登陆主机/ip' identified by '密码';

例如我现在是以 root 用户登录的 mysql,现在要为自己创建一个普通用户,且只能在本地登录,登录密码为 123456;其指令为:create user 'lmy'@'localhost' identified by '123456';

注意,如果我们创建用户时出现以下错误:

		ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

我们可以刷新一下缓冲区:flush privileges; 即可,如下图:

在这里插入图片描述

下面我们查看表中的信息:

在这里插入图片描述

我们发现 user 表中插入了我们新建的用户 lmy 的信息,此时我们新建一个终端窗口,尝试使用普通用户 lmy 登录 mysql,如下图:

在这里插入图片描述

如图所示,我们也能成功登录 mysql 了,但是当我们查看数据库的时候,会发现与 root 相比,很多数据库在 lmy 用户看来是不可见的,这就涉及了权限问题,我们后面再介绍,如下图:

在这里插入图片描述

那么我们可以设置从本地登录,也就是说也可以设置从远端登录咯?答案是可以的,我们在上一篇 数据库基础 中有介绍过远端登录的语法,但是我们会发现登录不上,这是因为该普通用户设置了不可远端登录的缘故,那么接下来我们将设置该用户可以在远端登录,即可以在任意地方使用主机 ip 登录。

其实我们想要更改用户的权限或者其它东西,只需要在 user 表中修改即可,那么现在我们需要修改用户的登录方式,可以直接修改表中的 host 列,指令为:update user set host='%' where user='lmy'; 其中 % 表示该用户可以在任意地方使用主机 ip 登录,接下来查看结果:

在这里插入图片描述

如上,表中的 host 确实修改成功了,接下来我们就可以使用上一篇博客中的从远端登录 mysql 啦。

注意,修改表中的数据我们需要使用指令:flush privileges; 刷新一下缓冲区即可。

如果我们不想修改表中的数据,我们也可以在创建用户的时候给它设置成可以远端登录,指令为:create user 'lmy'@'%' identified by '123456' ,然后再刷新缓冲区即可,如下图:

在这里插入图片描述

3. 删除用户

语法:drop user '用户名'@'主机名';

如我们要删除上面用户中的 lmy 用户,可以使用指令:drop user 'lmy'@'%'; 如下图:

在这里插入图片描述

再查看表中的信息时,发现已经被删除了:

在这里插入图片描述

4. 修改用户密码

  • 自己修改自己的密码

语法:set password=password('新的密码');

在这里插入图片描述

例如我们现在使用 lmy 登录 mysql,要修改自己的密码,如下所示修改成功:

在这里插入图片描述

  • root用户修改指定用户的密码

语法:set password for '用户名'@'主机名'=password('新的密码');

例如我们现在是 root 用户,我们再将 lmy 的密码改回 123456,如下修改成功:

在这里插入图片描述

注意,此时我们已经为普通用户设置了密码,也要为 root 设置密码,同时也要给之前的配置文件 my.cnf 中的 skip-grant-tables 去掉。不然在登录时会出现问题。

二、数据库的权限

1. 给用户授权

刚创建的用户没有任何权限,需要给用户授权,例如上面我们创建了 lmy 用户,但是使用 lmy 登录 mysql 时查看到的数据库却只有一个,说明我们没有查看 root 创建的数据库的权限,因为其它数据库都是 root 创建的。

语法:grant 权限列表 on 库名.对象名 to '用户名'@'登陆位置'

说明:

  • 权限列表,多个权限用逗号分开

      	grant select on ...
      	grant select, delete, create on ....
      	grant all [privileges] on ... -- 表示赋予该用户在该对象上的所有权限
    

*. * 代表本系统中的所有数据库的所有对象(表,视图,存储过程等)

  • 库.* : 表示某个数据库中的所有数据对象(表,视图,存储过程等)

例如我们现在使用 root 用户创建一个 root_create 的数据库:

在这里插入图片描述

我们是 root 可以查看到该数据库,但是我们切换到普通用户 lmy 尝试查看一下却没有:

在这里插入图片描述

所以我们需要给 lmy 用户授权 root_create 数据库下所有文件的select 权限,指令为:grant select on root_create.* to 'lmy'@'localhost';

在这里插入图片描述

接下来我们在 lmy 查看数据库:

在这里插入图片描述

发现我们可以使用 lmy 用户查看该数据库了!注意我们上面给 lmy 用户授权的是只读权限!其它权限一律没有!

我们可以查看用户现有的权限,使用指令:show grants for 'lmy'@'localhost';

在这里插入图片描述

如果发现赋权限后,没有生效,执行指令:flush privileges;

接下来我们尝试给 lmy 用户授予全部权限:grant all on *.* to 'lmy'@'localhost';

接下来我们登录 lmy 查看数据库,发现所有的数据库都能查看了:

在这里插入图片描述

如果赋权限后,没有生效,执行指令:flush privileges;,再不行就重新登录一下。

2. 回收权限

语法:revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置';

假设我们需要回收 lmy 用户的只读 root_create 的权限:revoke select on root_create.* from 'lmy'@'localhost';

在这里插入图片描述

我们再回到 lmy 端查看就发现看不到 root_create 数据库了:

在这里插入图片描述

如果需要取消 lmy 的所有权限,指令为:revoke all on *.* from 'lmy'@'localhost';

文章来源:https://blog.csdn.net/YoungMLet/article/details/134965692
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。