mysql权限验证过程
第一阶段:服务器首先会检查你是否允许连接。因为创建用户的时候会加上主机限制,可以限制成本地、某个IP、某个IP段、以及任何地方等,只允许你从配置的指定地方登陆。
第二阶段:如果你能连接,Mysql会检查你发出的每个请求,看你是否有足够的权限实施它。比如你要更新某个表、或者查询某个表,Mysql会查看你对哪个表或者某个列是否有权限。再比如,你要运行某个存储过程,Mysql会检查你对存储过程是否有执行权限等。
# 用户名和IP是否允许 --> 查看mysql.user表 --> 查看mysql.db表 --> 查看mysql.table_priv表 --> 查看mysql.column_priv 表--> 提示用户没有权限
常用的操作方法
1.创建用户
create user mycat@'192.168.0.%' identified by '123456';
2.修改用户密码
set password for mycat@'192.168.0.%' = password('xxxxxx');
update mysql.user set password=password('xxxx') where user='mycat@'192.168.0.%'';
ALTER USER 'mycat'@'192.168.0.%' IDENTIFIED WITH mysql_native_password BY 'xxxxxx'; #mysql8.0修改加密规则
3.修改用户名
rename user old_name@'192.168.0.%' to new_name@'192.168.0.%';
4.删除用户
drop user mycat@'192.168.0.%';
5.查看所有用户列表
select host,user,password from mysql.user ;
6.给账号授权
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, INDEX,ALTER ON db_name.* TO mycat@'192.168.0.%' with grant option;
7.收回授权
REVOKE CREATE,INDEX,ALTER ON db_name.* from mycat@'192.168.0.%';
8.查看用户权限
SHOW GRANTS FOR mycat@'192.168.0.%';
9.刷新权限
flush privileges;
10.mysql5.7支持角色
mysql.proxies_priv 5.7开始使用,有ROLE功能
mysql> create user dba@127.0.0.1 identified by '123456'; ##当作DBA角色
mysql> create user neo@127.0.0.1 identified by '123456';
mysql> create user cqs@127.0.0.1 identified by '123456';
mysql> grant proxy on dba@127.0.0.1 to neo@127.0.0.1; ##将dba@127.0.0.1 的权限授权给 neo@127.0.0.1
mysql> grant proxy on dba@127.0.0.1 to cqs@127.0.0.1;
mysql> grant select on *.* to dba@127.0.0.1;
权限控制原则
权限控制主要是出于安全因素,因此需要遵循一下几个经验原则:
1、只授予能满足需要的最小权限,防止用户干坏事。比如用户只是需要查询,那就只给select权限就可以了,不要给用户赋予update、insert或者delete权限。
2、创建用户的时候限制用户的登录主机,一般是限制成指定IP或者内网IP段。
3、初始化数据库的时候删除没有密码的用户。安装完数据库的时候会自动创建一些用户,这些用户默认没有密码。
4、为每个用户设置满足密码复杂度的密码。
5、定期清理不需要的用户。回收权限或者删除用户。
权限列表
权限 | 权限级别 | 权限说明 |
ALL | 库 | 所有权限 |
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线程权限 |