1. 闲不住的人首页
  2. 技术笔记
  3. 数据库
  4. MySQL

MySQL 用户管理

MySQL 用户管理 当一个数据库实例部署完成后,不论是给『运维 』 还是『程序』都需要为其创建一个 MySQL 用户,企业中通常由 DBA 统一协调创建,而且按需分配权限。企业中 DBA 通常使用 root 用户直接管理数据库。

MySQL 创建用户通常有两种方式:

  • 执行 create user 语句进行创建用户
  • 执行 grant 授权时直接创建用户

运维提示

​ 在 MySQL 8.0 版本中使用 grant 去创建用户会报错。

CREATE USER(创建用户)

创建 MySQL 用户最简单的语法格式如下:

CREATE USER [IF NOT EXISTS] 'user_name'@'host_name' IDENTIFIED BY 'password';
  • 表达用户的语法为:'user_name'@'host_name'
  • 单引号不是必须的,但如果其中包含特殊字符,则必须加单引号;
  • ”@’localhost’:代表匿名用户登录;
  • host_name:可以使用主机名或者 ipv4/ipv6 的地址。localhost 代表本机,127.0.0.1 代表 ipv4 的本机地址。
  • host_name:该字段可以使用 % 和 _(下划线)两个匹配字符,比如 ‘%’ 表示所有主机,’%.xbzdr.com’ 代表来自所有 xbzdr.com 这个域名下的所有主机,’192.168.1.%’ 表示所有来自 192.168.1 网段的主机; 具体语法说明参见:https://dev.mysql.com/doc/refman/8.0/en/create-user.html

下面以 MySQL 8.0 版本为例,创建一个用户:

图一 mysql create user
图一 mysql create user

创建完用户以后如果想要查看当前 MySQL 实例中有哪些用户,可以通过查询 mysql 库下的 user 表。

mysql> SELECT user,host FROM mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| grafana          | %         |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| ops              | localhost |
| root             | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)

用户已经创建了,接下来就可以使用该用户尝试连接 MySQL 实例。

图二 连接mysql数据库
图二 连接mysql数据库

另外如果你不想每次都手动输入一次密码,还可以考虑使用 mysql --login-path= 的方式,不过这种方式需要我们提前使用 mysql_config_editor 工具预先生成我们的用户配置。

[root@ops-node02 ~]# mysql_config_editor set -u ops -p -G ops
Enter password: 

参数说明如下:

  • set:mysql_config_editor 工具中的一个指令,用来设置用户名、密码、主机等信息。
  • -u:设置用于连接 MySQL 实例的用户名。
  • -p:设置用于连接 MySQL 实例用户的密码。
  • -G:用来设置 –login-path 所指定的名字。

使用 mysql_config_editor print --all 可以打印出所有设置过的用户信息。

[root@ops-node02 ~]# mysql_config_editor print --all              
[ops]
user = ops
password = *****

接下来就可以连接 MySQL 实例了

图三 使用mysql --login-path连接数据库
图三 使用mysql –login-path连接数据库

要删除用户信息也非常简单使用 mysql_config_editor remove 就可以啦。

[root@ops-node02 ~]# mysql_config_editor remove --login-path=ops
[root@ops-node02 ~]# mysql_config_editor print --all

ALTER USER(修改用户属性)

ALTER USER 语句可以修改用户密码、是否使用 SSL 连接、设置用户密码过期策略、锁定和解锁账号。

要修改 MySQL 用户密码语法如下:

ALTER USER 'user_name'@'host_name' IDENTIFIED BY 'password';

修改当前用户的密码可以将 ‘user_name’@’host_name’ 替换为 USER()

ALTER USER USER() IDENTIFIED BY 'password';

具体语法说明参见:https://dev.mysql.com/doc/refman/8.0/en/alter-user.html

运维提示

​ 在 MySQL 8.0 版本中,使用一些低版本的 Navicat 等客户端桌面工具连接数据库时,可能会遇到问题,因为在 MySQL 8.0 版本中,默认的身份认证插件是 caching_sha2_password 而在 MySQL 5.7 及之前的版本默认插件是 mysql_native_password,所以要想使用客户端桌面工具,你可能需要修改身份认证插件,如下语句:

ALTER USER 'ops'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

ACCOUNT LOCK (锁定用户)

有时候你作为 MySQL 数据库的管理人员,可能会遇到这种情况,当前数据库实例中有很多用户,而你又不清楚这些用户是否有用,不确定删除后是否会产生某种影响。这时候我们就可以通过锁定用户的方式,来避免因为误删除用户而导致的一些不要的麻烦。

仍然以我们在上面创建的 ops 用户为例,锁定 ops 用户之前可以正常登陆如下图:

图四 锁定用户之前
图四 锁定用户之前

现在我们来锁定 ops 用户

mysql> ALTER USER 'ops'@'localhost' ACCOUNT LOCK;
Query OK, 0 rows affected (0.18 sec)

在此使用 ops 用户连接数据库

图五 测试ops用户连接数据库
图五 测试ops用户连接数据库

此时使用 ops 用户连接 MySQL 提示我们的是 『Account is locked』

DROP USER(删除用户)

删除一个用户的语法更加简单如下:

DROP USER 'user_name'@'host_name';

删除 ops 用户

mysql> DROP USER 'ops'@'localhost';
Query OK, 0 rows affected (0.18 sec)

本文小结

本文介绍了 MySQL 数据库,如何创建用户、删除用户以及如何通过 –login-path 的方式连接数据库。用户虽然创建了,但是连入数据库后并没有权限进行任何操作,下一篇将介绍如何为用户进行授权。

原创文章,作者:王恩志,如若转载,请注明出处:https://www.xbzdr.com/758.html

如果您喜欢本站,点击这儿 不花一分钱捐赠本站

发表评论

登录后才能评论

联系我们

在线咨询:点击这里给我发消息

邮件:510749025@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code