记录允许连接到服务器的用户帐号信息
记录各个帐号在各个数据库上的操作权限
记录数据表级的操作权限
记录数据列级的操作权限
配合db权限表对给定主机上数据库级操作权限作更细致的控制。这个权限表不受GRANT和REVOKE语句的影响。
自顶向下逐层下查的方式验证用户的权限
权限 | 权限级别 | 权限说明 |
---|---|---|
CREATE | 数据库、表或索引 | 创建数据库、表或索引权限 |
DROP | 数据库或表 | 删除数据库或表权限 |
GRANT OPTION | 数据库、表或保存的程序 | 赋予权限选项 |
REFERENCES | 数据库或表 | |
ALTER | 表 | 更改表,比如添加字段、索引等 |
DELETE | 表 | 删除数据权限 |
INDEX | 表 | 索引权限 |
INSERT | 表 | 插入权限 |
SELECT | 表 | 查询权限 |
UPDATE | 表 | 更新权限 |
CREATE VIEW | 视图 | 创建视图权限 |
SHOW VIEW | 视图 | 查看视图权限 |
ALTER ROUTINE | 存储过程 | 更改存储过程权限 |
CREATE ROUTINE | 存储过程 | 创建存储过程权限 |
EXECUTE | 存储过程 | 执行存储过程权限 |
FILE | 服务器主机上的文件访问 | 文件访问权限 |
CREATE TEMPORARY TABLES | 服务器管理 | 创建临时表权限 |
LOCK TABLES | 服务器管理 | 锁表权限 |
CREATE USER | 服务器管理 | 创建用户权限 |
PROCESS | 服务器管理 | 查看进程权限 |
RELOAD | 服务器管理 | 执行flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload等命令的权限 |
REPLICATION CLIENT | 服务器管理 | 复制权限 |
REPLICATION SLAVE | 服务器管理 | 复制权限 |
SHOW DATABASES | 服务器管理 | 查看数据库权限 |
SHUTDOWN | 服务器管理 | 关闭数据库权限 |
SUPER | 服务器管理 | 执行kill线程权限 |
MySQL的授权用户由两部分组成: 用户名和登录主机名
,其格式为:‘username‘@‘hostname‘
。单引号不是必须的,若包含有特殊字符,则必须使用单引号包围起来。
%
和_
两个通配符。
%
:表示匹配所有_
:表示匹配单个字符CREATE USER ‘biu‘@‘localhost‘ IDENTIFIED BY ‘_password_‘;
drop user ‘biu‘@‘localhost‘;
对权限表user、db、host等做了update或者delete更新的时候,需要执行FLUSH PRIVILEGES命令来刷新内存中权限数据。
flush privileges;
-- 查看当前用户的权限
show grants;
-- 查看指定用户的权限
show grants for ‘biu‘@‘localhost‘;
grant all privileges on *.* to ‘biu‘@‘localhost‘;
revoke PROCESS ON *.* from ‘biu‘@‘localhost‘;
revoke delete on *.* from ‘biu‘@‘localhost‘;
ALTER USER ‘biu‘@‘localhost‘ IDENTIFIED BY ‘_password_‘;
ALTER USER USER() IDENTIFIED BY ‘_password_‘;
SET PASSWORD = PASSWORD(‘_password_‘);
mysqladmin -u _user_name_ -h _host_name_ -p "_password_"
使用mysqladmin设置密码应该被认为是不安全的。
使用MySQL复制,需要注意 CHANGE MASTER TO 语句限制 32 个字符;如果密码太长会被截断。
# 手动使帐户密码失效
ALTER USER ‘biu‘@‘localhost‘ PASSWORD EXPIRE;
default_password_lifetime = 180
默认为 0 ,永不过期
CREATE USER ‘biu‘@‘localhost‘ PASSWORD EXPIRE INTERVAL 90 DAY;
ALTER USER ‘biu‘@‘localhost‘ PASSWORD EXPIRE INTERVAL 90 DAY;
CREATE USER ‘biu‘@‘localhost‘ PASSWORD EXPIRE NEVER;
ALTER USER ‘biu‘@‘localhost‘ PASSWORD EXPIRE NEVER;
[mysqld]
password_history=6
password_reuse_interval=365
或
SET GLOBAL password_history = 6;
SET GLOBAL password_reuse_interval = 365;
CREATE USER ‘biu‘@‘localhost‘ PASSWORD HISTORY 5;
ALTER USER ‘biu‘@‘localhost‘ PASSWORD HISTORY 5;
CREATE USER ‘biu‘@‘localhost‘ PASSWORD HISTORY 5 PASSWORD REUSE INTERVAL 365 DAY;
ALTER USER ‘biu‘@‘localhost‘ PASSWORD HISTORY 5 PASSWORD REUSE INTERVAL 365 DAY;
可以设置在当前用户修改自己密码时候需要输入原密码,由参数 password_require_current
控制,默认不需要
-- 修改方式
ALTER USER USER() IDENTIFIED BY ‘_auth_string_‘ REPLACE ‘_current_auth_string_‘;
ALTER USER ‘biu‘@‘localhost‘ IDENTIFIED BY ‘_auth_string_‘ REPLACE ‘_current_auth_string_‘;
从MySQL 8.0.14开始,允许用户帐户具有双重密码,分别指定为主要和次要密码。
可以无缝的进行更改密码,而不用停止应用。
示例:
1.在主上修改帐号的密码,设置新密码
ALTER USER ‘appuser1‘@‘host1.example.com‘ IDENTIFIED BY ‘_password_b_‘ RETAIN CURRENT PASSWORD;
2.等待密码复制到从库
3.修改应用程序的密码,使用新的密码进行连接
4.删除旧密码
ALTER USER ‘appuser1‘@‘host1.example.com‘ DISCARD OLD PASSWORD;
RETAIN CURRENT PASSWORD : 保留帐户的当前密码作为其辅助密码。客户端使用新旧密码都可以连接。
如果使用 alter user 或 set password 设置新密码为空,则旧密码也会变为空
设置辅助密码需要权限APPLICATION_PASSWORD_ADMIN
mysql> CREATE USER ‘y1‘@‘localhost‘ IDENTIFIED BY RANDOM PASSWORD,‘y2‘@‘%‘ IDENTIFIED BY RANDOM PASSWORD;
+------+-----------+----------------------+
| user | host | generated password |
+------+-----------+----------------------+
| y1 | localhost | :ir5:D]*cbi}V3aP68/r |
| y2 | % | i2Zi/T+HpEw%MK:j{E5r |
+------+-----------+----------------------+
2 rows in set (0.01 sec)
# 修改为随机密码
mysql> ALTER USER ‘y1‘@‘localhost‘ IDENTIFIED BY RANDOM PASSWORD, ‘y2‘@‘%‘ IDENTIFIED BY RANDOM PASSWORD;
生成的密码长度默认为 20 ,长度由参数
generated_random_password_length
控制[5 - 255]
对账户设置登陆失败次数和锁定时间
CREATE USER ‘u1‘@‘localhost‘ IDENTIFIED BY ‘_password_‘ FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 3;
可以对账户进行如下限制:
-- 设置资源限制
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;
-- 修改
mysql> ALTER USER ‘francis‘@‘localhost‘ WITH MAX_QUERIES_PER_HOUR 100;
-- 删除限制
mysql> ALTER USER ‘francis‘@‘localhost‘ WITH MAX_CONNECTIONS_PER_HOUR 0;
原文:https://www.cnblogs.com/binliubiao/p/15233804.html