MySQL8 用户权限

MySQL8 用户权限,MySQL8教程,介绍 MySQL8 用户和 MySQL8 权限等。

【全栈教程】:https://try8.cn/article
教程目录:
教程内容:
最近更新:2023-04-17

一、MySQL8 用户权限概念

MySQL 允许客户端用户连接到服务器并访问服务器管理数据,MySQL 用户权限系统的主要功能是对给定主机连接的用户进行身份验证,并将该用户与数据库的权限相关联。


1.1、授权表介绍

在 MySQL8 之前,授权表使用 MyISAM 并且是非事务性的,在 MySQL8 中,授权表使用 InnoDB 存储引擎并且是事务性的。服务器在启动时将授权表的内容读入内存,您可以通过命令 FLUSH PRIVILEGES 重新加载。

user:用户帐户、静态全局权限表;
global_grants:动态全局权限表;
db:数据库级的权限表;
tables_priv:存储表级权限;
columns_priv: 存储列级权限;
procs_priv: 存储过程和函数权限表;
proxies_priv: 代理用户权限表;
default_roles:默认用户角色表;
role_edges:记录角色与用户的授权关系表;
password_history: 密码更改历史表。


二、MySQL8 用户权限管理

2.1、数据库连接

MySQL 帐户名由用户名和主机名组成,语法: 'user_name'@'host_name'。MySQL 用户名存储在 mysql 的 user 表中,最长 32 个字符。MySQL 密码是使用身份验证插件处理,插件使用特定的算法进行加密存储。

mysql --user=user_name --password=password db_name //完整命令连接
mysql -u user_name -ppassword db_name //短命令连接,-p选项后不能有空格


2.2、账号管理

虽然 INSERT、UPDATE、DELETE 等语句也可以直接修改授权表,不过不推荐,因为用户权限一般涉及多表直接修改风险较高,所以要管理 MySQL 帐户,请使用专用的 SQL 语句:

  • CREATE USER 和 DROP USER 用于创建和删除帐户;
  • GRANT 和 REVOKE 用于分配权限和撤销权限;
  • SHOW GRANTS 用于显示帐户权限。


局域网络示例:

CREATE USER 'try8'@'localhost' IDENTIFIED BY 'password'; //创建局域网络账号
GRANT ALL ON *.* TO 'try8'@'localhost' WITH GRANT OPTION; //分配权限
REVOKE ALL ON *.* FROM 'try8'@'localhost'; //撤销权限
SHOW GRANTS FOR 'try8'@'localhost'; //查看权限
DROP USER 'try8'@'localhost'; //删除账号


指定网络示例:

CREATE USER 'try8'@'%.try8.cn' IDENTIFIED BY 'password'; //创建指定网络账号
GRANT ALL ON *.* TO 'try8'@'%.try8.cn' WITH GRANT OPTION; //分配权限
REVOKE ALL ON *.* FROM 'try8'@'%.try8.cn'; //撤销权限
SHOW GRANTS FOR 'try8'@'%.try8.cn'; //查看权限
DROP USER 'try8'@'%.try8.cn'; //删除账号


外部网络示例:

CREATE USER 'try8'@'%' IDENTIFIED BY 'password'; //创建外部网络账号
GRANT ALL ON *.* TO 'try8'@'%' WITH GRANT OPTION; //分配权限
REVOKE ALL ON *.* FROM 'try8'@'%'; //撤销权限
SHOW GRANTS FOR 'try8'@'%'; //查看权限
DROP USER 'try8'@'%'; //删除账号


三、MySQL8 用户密码管理

3.1、修改用户密码

ALTER USER 'try8'@'localhost' IDENTIFIED BY 'password';//修改密码


3.2、设置密码过期

ALTER USER 'try8'@'localhost' PASSWORD EXPIRE; //设置立即过期
ALTER USER 'try8'@'localhost' PASSWORD EXPIRE INTERVAL 30 DAY; //设置30天过期
ALTER USER 'try8'@'localhost' PASSWORD EXPIRE NEVER; //禁用密码过期


3.3、修改密码配置

首先打开 MySQL 配置文件:

vim /etc/my.cnf
或:vim /etc/mysql/my.cnf
或:vim /etc/mysql/conf.d/mysqld.cnf


修改配置,如下表示禁止重复使用最近3个或超过30天的密码:

[mysqld]
password_history=3
password_reuse_interval=30


四、MySQL8 用户账号锁定

连续登录失败过多将导致帐户锁定,每个帐户所需的登录失败次数和锁定时间是可配置的。

# 连续登录失败3次则锁定3天,天数可取值:0-32767,设置 0 则代表解锁
CREATE USER 'try8'@'localhost' IDENTIFIED BY 'password' FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 3;
# 连续登录失败3次则永久锁定
ALTER USER 'try8'@'localhost' FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME UNBOUNDED;


五、MySQL8 用户资源限制

将全局系统变量 max_user_connections 设置为非零值,可以限制同时建立的连接数,但是对客户端连接后可以执行的查询更新操作没有限制。客户端可以发出的任何语句都计入查询限制,只有修改库表才计入更新限制。

  • MAX_QUERIES_PER_HOUR:客户端每小时可以发出的查询数;
  • MAX_UPDATES_PER_HOUR:客户端每小时可以发出的更新数;
  • MAX_CONNECTIONS_PER_HOUR:客户端每小时可以连接到服务器的次数;
  • MAX_USER_CONNECTIONS:客户端同时连接的服务器数量等。


通过创建用户账号限制示例:

CREATE USER 'try8'@'localhost' IDENTIFIED BY 'password'
  WITH MAX_QUERIES_PER_HOUR 3 
  MAX_UPDATES_PER_HOUR 3
  MAX_CONNECTIONS_PER_HOUR 3
  MAX_USER_CONNECTIONS 3; //客户端每小时的查询数、更新数、连接服务器的次数和数量为3。


通过修改和删除账号限制示例:

ALTER USER 'try8'@'localhost' WITH MAX_QUERIES_PER_HOUR 1024; //修改限制
ALTER USER 'try8'@'localhost' WITH MAX_CONNECTIONS_PER_HOUR 0; //删除限制


六、MySQL8 MySQL8 用户权限 总结

MySQL8教程 - MySQL8 用户权限,主要用于介绍 MySQL 和 MySQL8 数据库,从 MySQL8 用户开始,逐步到 MySQL8 权限和资源限制等,通篇实用易懂,让 MySQL8 入门更加快速和简单。


《MySQL8教程》主打原创、全部免费,欢迎学习和转载,如需交流请加微信号:try8_cn。