MySQL 允许客户端用户连接到服务器并访问服务器管理数据,MySQL 用户权限系统的主要功能是对给定主机连接的用户进行身份验证,并将该用户与数据库的权限相关联。
在 MySQL8 之前,授权表使用 MyISAM 并且是非事务性的,在 MySQL8 中,授权表使用 InnoDB 存储引擎并且是事务性的。服务器在启动时将授权表的内容读入内存,您可以通过命令 FLUSH PRIVILEGES 重新加载。
user:用户帐户、静态全局权限表; global_grants:动态全局权限表; db:数据库级的权限表; tables_priv:存储表级权限; columns_priv: 存储列级权限; procs_priv: 存储过程和函数权限表; proxies_priv: 代理用户权限表; default_roles:默认用户角色表; role_edges:记录角色与用户的授权关系表; password_history: 密码更改历史表。
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选项后不能有空格
虽然 INSERT、UPDATE、DELETE 等语句也可以直接修改授权表,不过不推荐,因为用户权限一般涉及多表直接修改风险较高,所以要管理 MySQL 帐户,请使用专用的 SQL 语句:
局域网络示例:
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'@'%'; //删除账号
ALTER USER 'try8'@'localhost' IDENTIFIED BY 'password';//修改密码
ALTER USER 'try8'@'localhost' PASSWORD EXPIRE; //设置立即过期 ALTER USER 'try8'@'localhost' PASSWORD EXPIRE INTERVAL 30 DAY; //设置30天过期 ALTER USER 'try8'@'localhost' PASSWORD EXPIRE NEVER; //禁用密码过期
首先打开 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
连续登录失败过多将导致帐户锁定,每个帐户所需的登录失败次数和锁定时间是可配置的。
# 连续登录失败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;
将全局系统变量 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 用户权限,主要用于介绍 MySQL 和 MySQL8 数据库,从 MySQL8 用户开始,逐步到 MySQL8 权限和资源限制等,通篇实用易懂,让 MySQL8 入门更加快速和简单。
《MySQL8教程》主打原创、全部免费,欢迎学习和转载,如需交流请加微信号:try8_cn。