目录
通过执行create user/alter user设置/修改用户的资源限制。
一、系统权限表介绍
-
user和db权限表结构
-
User权限表结构中的特殊字段
-
Tables_priv和columns_priv权限表结构
-
Tables_priv和columns_priv权限值
-
procs_priv权限表结构
Routine_type是枚举类型,代表是存储过程还是函数;Timestamp和grantor两个字段暂时没用
-
系统权限表字段长度限制表
二、权限认证中的大小写敏感问题
字段 user,password,authencation_string,db,table_name大小写敏感 ;
字段 host,column_name,routine_name大小写不敏感。
三、mysql用户授权
-
查看用户授权信息
- 查看用户已授权信息
show grants for root@localhost;
- 查看用户的其他非授权信息
show create user root@localhost;
-
MySQL的授权用户由两部分组成:用户名和登录主机名
- 表达用户的语法为‘user_name’@‘host_name’;
- 单引号不是必须,但如果其中包含特殊字符则是必须的;
- ‘’@‘localhost’代表匿名登录的用户;
- Host_name可以使主机名或者ipv4/ipv6的地址。Localhost代表本机,127.0.0.1代表ipv4的 本机地址,::1代表ipv6的本机地址;
- Host_name字段允许使用%和_两个匹配字符,比如’%’代表所有主机,’%.mysql.com’代表 来自mysql.com这个域名下的所有主机,‘192.168.1.%’代表所有来自192.168.1网段的主机。
注意:要先关闭防火墙再链接。
查看防火墙状态:firewall-cmd --state 停止firewall:systemctl stop firewalld.service 禁止firewall开机启动:systemctl disable firewalld.service
-
mySQL修改权限的生效
- 执行Grant,revoke,set password,rename user命令修改权限之后,MySQL会自动 将修改后的权限信息同步加载到系统内存中;
- 如果执行insert/update/delete操作上述的系统权限表之后,则必须再执行刷 新权限命令才能同步到系统内存中,刷新权限命令包括:flush privileges/mysqladmin flush-privileges/mysqladmin reload;
- 如果是修改tables和columns级别的权限,则客户端的下次操作新权限就会生效;
- 如果是修改database级别的权限,则新权限在客户端执行use database命令后生效;
- 如果是修改global级别的权限,则需要重新创建连接新权限才能生效;
- --skip-grant-tables可以跳过所有系统权限表而允许所有用户登录,只在特殊情况下暂时使用;
四、mysql用户管理
-
创建MySQL用户
有两种方式创建MySQL授权用户
- 执行create user/grant命令(推荐方式)
create user 'custom'@'localhost' identified by '132456';
- 通过insert语句直接操作MySQL系统权限表
-
删除MySQL用户
通过执行drop user命令删除MySQL用户
drop user 'jeffrey'@'localhost';
五、mysql用户资源管理
- 通过设置全局变量max_user_connections可以限制所有用户在同一时 间连接MySQL实例的数量,但此参数无法对每个用户区别对待,所以 MySQL提供了对每个用户的资源限制管理;
- MAX_QUERIES_PER_HOUR:一个用户在一个小时内可以执行查询的次 数(基本包含所有语句);
- MAX_UPDATES_PER_HOUR:一个用户在一个小时内可以执行修改的次 数(仅包含修改数据库或表的语句);
- MAX_CONNECTIONS_PER_HOUR:一个用户在一个小时内可以连接 MySQL的时间;
- MAX_USER_CONNECTIONS:一个用户可以在同一时间连接MySQL实例 的数量;
- 从5.0.3版本开始,对用户‘user’@‘%.example.com’的资源限制是指所有 通过example.com域名主机连接user用户的连接,而不是分别指从 host1.example.com和host2.example.com主机过来的连接。
-
设置/修改用户资源限制
通过执行create user/alter user设置/修改用户的资源限制。
- 设置:
create user 'francis'@'localhost' identified by 'frank' WITH MAX_QUERIES_PER_HOUR 20 MAX_UPDATES_PER_HOUR 10 MAX_CONNECTIONS_PER_HOUR 5 MAX_USER_CONNECTIONS 2;
- 修改:
alter user 'francis'@'localhost' WITH MAX_QUERIES_PER_HOUR 100;
取消某项资源限制就是把原先的值修改成0
alter user 'francis'@'localhost' WITH MAX_CONNECTIONS_PER_HOUR 0;
当针对某个用户的max_user_connections非0时,则忽略全局系统参数 max_user_connections,反之则全局系统参数生效。
-
mysql用户密码管理
- 执行create user创建用户和密码
create user 'jeffrey'@'localhost' identified by 'mypass';
- 修改用户密码的方式:
alter user 'jeffrey'@'localhost' identified by 'mypass';
- 修改用户自身密码的方式:
alter user user() identified by 'mypass';
-
mysql用户密码过期策略
- 设置系统参数default_password_lifetime作用于所有的用户账户
default_password_lifetime=180 设置180天过期
default_password_lifetime=0 设置密码不过期
- 如果为每个用户设置了密码过期策略,则会覆盖上述系统参数
ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
ALTER USER ‘jeffrey’@‘localhost’ PASSWORD EXPIRE NEVER; 密码不过期
ALTER USER ‘jeffrey’@‘localhost’ PASSWORD EXPIRE DEFAULT; 默认过期策略
- 手动强制某个用户密码过期
ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE;
-
mysql用户lock
- 通过执行create user/alter user命令中带account lock/unlock子句设 置用户的lock状态
Create user语句默认的用户是unlock状态
create user abc2@localhost identified by 'mysql' account lock;
- Alter user语句默认不会修改用户的lock/unlock状态
alter user 'mysql.sys'@localhost account lock;
alter user 'mysql.sys'@localhost account unlock;
- 当客户端使用lock状态的用户登录MySQL时,会收到如此报错
Access denied for user 'user_name'@'host_name'.
Account is locked.