本文已参与「新人创作礼」活动,一起开启掘金创作之路。
用户相关
进入 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;