mysql/mariadb:数据库用户管理语句

admin2周前笔记24

在了解mysql的用户管理语句之前,先来了解一下mysql的用户账号格式,如下:

username@host

上述格式表示,username对应的用户能够通过哪个host登录mysql。

host:此mysql用户能够通过哪些客户端主机IP登录当前服务器上的mysql服务,对于mysql来说,host可以为主机名,也可以为IP地址,但是,mysql认为主机名和IP地址属于不同的主机;

我们也可以使用通配符,描述客户端所在的host,常用通配符如下:

_:表示任意单个字符

%:表示任意长度的任意字符

使用通配符匹配主机的示例如下:

root@’10.1.%.%’

上述配置表示root用户可以通过10.1这个网段远程登录。

好了,了解完mysql的用户格式,我们聊聊mysql中管理用户的语句。

查询用户

我们可以切换到mysql库,查询user表,得到当前库中的用户名和其能够远程登录时所在的host

image.png

创建用户

我们有多种方法可以创建用户。

方法一:使用create user命令创建mysql用户,示例如下,示例中分别创建了两个用户,创建zsyblog用户时没有设定密码,创建zsyzsy用户时设定了密码。

image.png

方法二:直接在mysql库的user表中插入一条记录,这种方法使用较少,而且这种方法在设置了严格的sql-mode以后,无法使用。

如下示例直接在mysql.user表中插入了一条记录,添加了一个zsythink用户,密码为123123,zsythink用户可以通过192.168.%.%网段登录mysql。

image.png

注意:如果当前mysql数据库的sql-mode设置为了严格检查(如TRADITIONAL),则无法使用上述方法插入数据,如果sql-mode已经设置为严格检查,使用上述语句时可能会出现类似如下错误:

ERROR 1364 (HY000): Field ‘ssl_cipher’ doesn’t have a default value

方法三:在授权数据库的同时,如果对应的用户不存在,那么mysql将会自动创建对应的用户,比如,管理员想要授权zsy用户可以访问zsythink数据库,但是目前zsy用户并不存在,当我们使用类似如下语句授权时,[email protected]用户将会自动被创建,如下语句不做过多解释,我们会在授权语句总结的文章中具体介绍它们。

grant all on zsythink.* to [email protected] identified by 'zsythink';

image.png

删除用户

我们通常使用drop命令删除用户或者直接删除mysql.user表中对应用户的记录。

这两种方法都能够删除用户,但是drop删除的更加彻底,我们一个一个来说。

删除用户方法一:使用delete语句删除mysql.user表中的用户对应的记录,但是使用此方法会有相关信息残留,示例如下

上例中,使用了delete语句删除了user表中tu@localhost用户对应的记录,也就相当于删除了”tu@localhost”用户,但是,如果某些数据库的权限已经授权给了”tu@localhost”用户,那么,在mysql.db表中,”tu@localhost”用户对应的权限将不会被删除,当管理员想要再次创建了”tu@localhost”用户时,则会出现问题,如果管理员想要使用create user命令再次创建”tu@localhost”,可能会出现如下错误:

image.png

出现上述错误的原因有可能就是之前使用delete语句删除过同名账户,此时,有两种方法可以解决上述问题。

第一种解决方案:我们可以删除mysql.db表中原”tu@localhost”用户残留的权限数据后,使用flush privileges命令刷新,然后再次使用上述create user命令创建新的”tu@localhost”用户即可,其实就是将原”tu@localhost”用户残留的数据删除干净(相当于使用drop user命令删除了用户)。

第二种解决方案:使用grant命令授权”tu@localhost”用户能够访问任意数据库即可,如果授权用户的数据库与原来残留的权限所对应的数据库不是同一个库,残留的权限将会被新创建的”tu@localhost”用户所获得的,因为新用户与旧用户的名称相同,所以新的”tu@localhost”用户会继承被删除同名用户的权限,当然,是在残留权限对应的库与新授权的数据库不为同一个库的时候。

删除用户方法二:使用drop user命令删除对应用户,使用此方法将会同时删除mysql.user表与mysql.db表中的数据,也就是说,用户与用户对应的所有权限将被删除。

image.png

使用drop user命令不会出现使用delete语句删除用户时的情况,但是如果为了保留用户的权限,也可以选择使用delete语句删除对应记录。

重命名用户

可以使用如下语句重命名账户。

rename user OldName to NewName;

重命名后的用户的密码以及权限不会发生改变,只有用户名会发生改变。

image.png

相关文章

简单介绍正则表达式拆分url实例代码

背景做web开发的同学,经常会有从url中获取二级域名或者主域名或者参数等等需求,需要扎实的正则功底。本文提供一个全面的url拆分案例,需要哪个部分用哪个部分。案例将url的各个部分拆开,让我想取哪部...

如何在 Linux 上永久挂载一个 Windows 共享

如何在 Linux 上永久挂载一个 Windows 共享

在 Linux 上和一个 Windows 网络进行交互从来就不是件轻松的事情。想想多少企业正在采用 Linux,需要在这两个平台上彼此协作。幸运的是,有了一些工具的帮助,你可以轻松地将 Windows...

简单介绍mysql中数据库覆盖导入的几种方式

简单介绍mysql中数据库覆盖导入的几种方式

众所周知,数据库中INSERT INTO语法是append方式的插入,而最近在处理一些客户数据导入场景时,经常遇到需要覆盖式导入的情况常见的覆盖式导入主要有下面两种:1、部分覆盖:新老数据根据关键列值...

XML DOM 节点信息概述

XML DOM 节点信息概述

在 XML DOM 中,每个节点都是一个对象。对象拥有方法和属性,并可通过 JavaScript 进行访问和操作。三个重要的节点属性是:nodeNamenodeValuenodeTypenodeNam...

从零开始用 Axios 请求后端接口

从零开始用 Axios 请求后端接口

对于前端同学来说,请求后端接口是一个非常通用的东西。在十几年前的时候,我们还用 Ajax 去请求后端接口。但在 2023 年的今天,很多框架都很成熟了,我们有了更加快捷的方式 —— Axios 框架。...

MySQL DBA 需要了解一下 InnoDB Online DDL 算法更新

MySQL DBA 需要了解一下 InnoDB Online DDL 算法更新

在 MySQL 8.0.12 中,我们引入了一种新的 DDL 算法,该算法在更改表的定义时不会阻塞表。第一个即时操作是在表格末尾添加一列,这是来自腾讯游戏的贡献。然后在 MySQL...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。