<MySQL> 用户管理

目录

前言:

一、用户

(二)创建用户

(三)删除用户

(四)修改用户密码 

二、数据库的权限

(一)用户权限

(二)回收权限


前言:

MySQL中的用户管理是指对数据库用户进行创建、授权、修改和删除等操作的过程。用户是MySQL数据库的访问身份,它们定义了连接到数据库的权限和限制。

MySQL中也是有root用户和普通用户之分的。跟Linux一样,root用户就是所谓的超级用户,权限较大且基本上没有限制。普通用户都是我们自己后期创建的,权限相对较小且较多限制。 

一、用户

MySQL中的用户,都存储在系统数据库mysqluser表中。如下图:

我们不妨来看看user表的表结构,如下图:

说明一下,在"mysql"数据库中,有一个名为"user"的表,该表记录了MySQL服务器上的用户账户信息。下面是对"user"表重要字段的详解:

  • user字段:这是用户账户的名称,用于登录MySQL服务器时使用。每个用户账户都必须具有唯一的用户名。
  • host字段:表示允许该用户从哪个主机连接到MySQL服务器。可以使用具体的主机名,也可以使用通配符%,表示允许来自任意主机的连接。
  • authentication_string字段:用于存储用户账户的密码。在MySQL 8.0版本之前,密码以明文形式存储在该字段中。而在MySQL 8.0版本之后,密码以加密形式存储,并且采用了更安全的认证方式。
  • select_priv、insert_priv、update_priv、delete_priv等权限字段:这些字段用于记录用户账户具有的数据库操作权限。例如,select_priv字段表示用户是否具有查询数据的权限,insert_priv字段表示用户是否具有插入数据的权限,依此类推。
  • grant_priv字段:表示用户是否具有赋予其他用户权限的能力。如果该字段值为'Y',则表示该用户具有授权权限。

从上述的表结构我们能够看到,HOSTUSER字段一同构成主键,这也就意味着可以有相同的用户名,只需要登录的主机限制不同即可!下面我们再看一下该表中的数据,如下图:

从上图中,我们也能大概的看出来root用户的权限是较高的。由于字段较多,现在我们就挑选出我们需要的字段,如下图:

mysql> select USER, HOST, authentication_string from user;

从上图中能够看到,现在是有三个用户,均为系统自带的。接下来我们看怎么自己创建用户。

(二)创建用户

创建用户的语法:

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

下面我们就来创建一个用户,具体如下: 

这里有几点需要解释:

  • 登陆主机为localhost,代表着该用户只允许在当前主机登录;
  • 登陆主机也可以为 %,代表着该用户可以在任意主机登录。但是,不要轻易添加一个可以从任意地方登陆的user。
  • 从上述例子中我们也能发现,对用户的增删查改操作本质上就是在修改user表。可以直接对user表操作,但是不建议这样做!
  • flush privileges 为刷新权限命令。

下面我们登陆一下这个用户,具体如下图:

当我们设置了登陆主机位 % 时,同时也在本主机上安装了MySQL,那么就可以使用cmd命令窗口进行登录。具体用到的指令为:mysql -u 用户名 -h IP地址 -P 端口号 -p。这里就不再演示。

(三)删除用户

删除用户语法:

drop user '用户名'@'主机名'

当我们处于普通用户时,并不能删除其他用户。原因很简单,权限不够。具体如下图: 

现在我们切换到root用户。在进行删除用户,具体如下:

(四)修改用户密码 

修改用户密码语法:

--自己改自己密码
set password=password('新的密码');
 
--root用户修改指定用户的密码
set password for '用户名'@'主机名'=password('新的密码');

当用户相对自己修改密码时,可用到上述的第一条语句中。第二条语句可用于root用户对其他普通用户做修改。下面我们要试一下第二条语句。具体如下图:

如果上面的语句执行吧成功,就执行下面的语句: 

UPDATE user SET authentication_string=PASSWORD('new_password') WHERE User='user1';

注意:创建用户的SQL当中包含用户的密码,因此该SQL不会被历史记录下来,所以不能通过上下键进行追溯。

二、数据库的权限

(一)用户权限

MySQL中的权限是与用户关联的。每个用户都有自己的用户名和密码,并且可以被分配不同的权限。

MySQL提供了各种权限,包括SELECT(查询)、INSERT(插入)、DELETE(删除)、UPDATE(更新)、CREATE(创建)、DROP(删除)、GRANT(授权)、REVOKE(撤销授权)等。具体可结合下图:

但是刚创建的用户没有任何权限。需要给用户授权。 授权语法:

grant 权限列表 on 库.对象名 to '用户名'@'登陆位置' [identified by '密码']

说明一下:

  1. 权限列表,多个权限用逗号分开。
    grant select on ...
     
    grant select, delete, create on ....
     
    grant all [privileges] on ... -- 表示赋予该用户在该对象上的所有权限
  2. *.* : 代表本系统中的所有数据库的所有对象(表,视图,存储过程等)。
  3. 库.* : 表示某个数据库中的所有数据对象(表,视图,存储过程等)。
  4. identified by 可选。 如果用户存在,赋予权限的同时修改密码 , 如果该用户不存在,就是创建用户。

或许你到这里就会明白了,我们不建议使用root的用户的原因之一是因为root用户的权限太大了,可以操作任何表。但是我们可以创建普通用户,然后给普通用户赋予对某个数据库中表的操作权限。这样就可以很好的将整个数据库管理起来。


先使用root用户账户查看有哪些数据库:

 我们先来看一下普通用户 user3 中可以对哪些库进行操作,如下图:

我们看到,只有一个系统自带的数据库,其他的并没有任何数据库。同时只有一个 USAGE 权限,就是登录的权限,相当于刚创建的用户没有任何权限。现在我们通过root用户给user3用户赋予user3数据库下所有文件的select权限 具体如下:

mysql> grant select on test_db.* to 'user3'@'localhost';

 说明一下:上述的语句是给用户user3能够查询test_db库中所有表信息的权限。具体如下图:

我们再看user3用户,如下图:

我们看到有test_db库了。现在我们可以进入到test_db库中进行查看其中所有表以及表中的信息。具体如下:

但是由于只赋予了select权限,所以只能查看,并不能对表进行修改操作。具体如下图:

现在我们切换到root用户将所有的权限赋给用户user3,具体操作如下:

mysql> grant all on test_db.* to 'user3'@'localhost';

这时用户user3 可以对staff中的表进行修改操作了。具体如下:

(二)回收权限

回收权限语法:

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

现在是用户user3 拥有所有对test_db库中表操作的权限。现在我们想收回一些权限,可以用到revoke。具体如下:

mysql> revoke all on test_db.* from 'user3'@'localhost';

我们可以看到,用户user3的权限只有UASGE,也就是只有登陆权限了。

注意:回收用户在某一数据库下的权限后,在该用户下一次进入该数据库时才会起作用。也就是如果回收权限时该用户正在使用对应数据库,那么回收权限后该用户仍然拥有对应的权限。

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值