共计 2219 个字符,预计需要花费 6 分钟才能阅读完成。
导读 | MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。 |
在了解 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
我们有多种方法可以创建用户。
方法一:使用 create user 命令创建 mysql 用户,示例如下,示例中分别创建了两个用户,创建 zsyblog 用户时没有设定密码,创建 zsyzsy 用户时设定了密码。
方法二:直接在 mysql 库的 user 表中插入一条记录,这种方法使用较少,而且这种方法在设置了严格的 sql-mode 以后,无法使用。
如下示例直接在 mysql.user 表中插入了一条记录,添加了一个 zsythink 用户,密码为 123123,zsythink 用户可以通过 192.168.%.% 网段登录 mysql。
注意:如果当前 mysql 数据库的 sql-mode 设置为了严格检查(如 TRADITIONAL),则无法使用上述方法插入数据,如果 sql-mode 已经设置为严格检查,使用上述语句时可能会出现类似如下错误:
ERROR 1364 (HY000): Field‘ssl_cipher’doesn’t have a default value
方法三:在授权数据库的同时,如果对应的用户不存在,那么 mysql 将会自动创建对应的用户,比如,管理员想要授权 zsy 用户可以访问 zsythink 数据库,但是目前 zsy 用户并不存在,当我们使用类似如下语句授权时,zsy@127.0.0.1 用户将会自动被创建,如下语句不做过多解释,我们会在授权语句总结的文章中具体介绍它们。
grant all on zsythink.* to zsy@127.0.0.1 identified by 'zsythink';
我们通常使用 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”,可能会出现如下错误:
出现上述错误的原因有可能就是之前使用 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 表中的数据,也就是说,用户与用户对应的所有权限将被删除。
使用 drop user 命令不会出现使用 delete 语句删除用户时的情况,但是如果为了保留用户的权限,也可以选择使用 delete 语句删除对应记录。
可以使用如下语句重命名账户。
rename user OldName to NewName;
重命名后的用户的密码以及权限不会发生改变,只有用户名会发生改变。