前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【MySQL】用户管理

【MySQL】用户管理

作者头像
YoungMLet
发布2024-03-01 12:12:15
1660
发布2024-03-01 12:12:15
举报
文章被收录于专栏:C++/Linux
用户管理

一、用户

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';

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

代码语言:javascript
复制
		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 '用户名'@'登陆位置'

说明:

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

代码语言:javascript
复制
  	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';

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 用户管理
  • 一、用户
    • 1. 用户信息
      • 2. 创建用户
        • 3. 删除用户
          • 4. 修改用户密码
          • 二、数据库的权限
            • 1. 给用户授权
              • 2. 回收权限
              相关产品与服务
              云数据库 MySQL
              腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档