MySQL8.0-用户相关

317 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

用户相关

进入 MySQL 表

MySQL 的用户相关操作都需要在 mysql 库中的 user 表进行操作, 所以我们在查询等操作时,需要先进入到库中

use mysql;

查看用户相关信息

select host, user, authentication_string, plugin from user;

host: 表示允许访问的范围 user: 登录用户名 authentication_string: 加密的密码 plugin: 身份验证的方式,可选值有(caching_sha2_password(8.0默认)、sha256_password、LDAP、Kerberos)

创建用户

create user 
if not exists 
'admin'@'localhost' 
identified with mysql_native_password by '123456'
with max_queries_per_hour 500
max_updates_per_hour 100

'admin' :用户名,用来登录

'localhost' :仅从 loaclhost 访问,可以通过对 IP 限制:10.10.%.%;也可已给 % 让用户可以在任何主机访问

'123456' :登录密码

mysql_native_password :身份验证的方式,使用默认身份验证(可以指定其他身份验证:caching_sha2_password(8.0默认)、sha256_password、LDAP、Kerberos)(在一些工具中如果指定其他的身份验证方式可能会导致连接失败,所以此时我们需要将验证方式设置为mysql_native_password,也可以后期修改)

max_queries_per_hour :用户在一小时内执行的最大查询数量为500

max_updates_per_hour :用户可以在一小时内执行最大更新次数为100次

删除用户

删除用户需要使用 用户名 + 访问IP,进行查找

不建议直接对 user 表执行 delete 语句,这样不会自动刷新权限,需要手动调用下权限的刷新命令

drop user 'admin'@'localhost';

修改用户密码

# 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'mysql2022';
# 修改密码和身份验证方式
ALTER USER 'test'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysql2022';

注意:'root'@'localhost' 分别表示 用户名 和 访问IP,需要已存在,如果需要修改 ip,可以查看下面的方式

mysql_native_password :使用默认身份验证(可以指定其他身份验证:caching_sha2_password(8.0默认)、sha256_password、LDAP、Kerberos)

修改用户 Host

update 语句修改, 然后使用 flush privileges 来刷新权限即可生效;

update mysql.user set host = '%' where user = 'admin';
flush privileges;

host 用来指定什么机器可以连接,如果设置为 % 则表示谁都可以连接;

如果设置为 localhost表示只有本地可以连接

当然,也可以指定明确的IP或者利用%模糊匹配IP

授予用户权限

# select 权限
grant select on mysql.* to 'remote'@'%';
# 多个权限
grant update,delete,update on mysql.* to 'remote'@'%';
# 全部权限
grant all on *.* to 'admin'@'%';

select:授权范围

  • all:全部权限
  • select:查询权限
  • insert,update,delete:多个权限

mysql:给用户mysql数据库的权限,如果用 * 表示所有数据库

*:数据库的表名,如果使用 * 表示所有表,如果指定明确表,多个表使用,分割

remote:授权给这个用户

%:授权个remote用户的%IP

创建一个管理员用户

为了避免使用 root 用户操作

create user 'admin'@'%' identified with mysql_native_password by '123456'
# all表示给最高权限(除grant指令外)
grant all on *.* to 'admin'@'%';
# 也可以手动授予grant权限
grant grant option on *.* to 'admin'@'%';

查询用户权限

show grants for 'admin'@'%';

撤销权限

revoke insert on mysql.* from 'admin'@'%';

重新加载表

在mysql.user 表中,如果使用create、drop等sql,mysql会自动通知刷新权限,而如果使用update、delete等sql,则不会自动通知,除非手动重启服务器或者执行以下命令进行刷新

flush privileges;