权限管理
1. 查看用户
select * from mysql.user;
- 进入 mysql数据库的user表,查看有什么用户。user 用户名;host 可登录的ip地址,%为不指定;plugin 字段为密码加密方式。mysql8较旧版更新了密码加密方式。旧版本mysql_native_password,新版本caching_sha2_password(默认)。
- user表host,user双主键,相关操作都需要user和host。
2. 创建用户
CREATE USER 'username'@'host' IDENTIFIED with mysql_native_password BY 'password';
- username:要创建用户的名字。
- host:表示要这个新创建的用户允许从哪台机登陆,如果只允许从本机登陆,则 填 ‘localhost’ ,如果允许从远程登陆,则填 ‘%’。
- by ‘password’:新创建用户的登陆数据库密码,如果没密码可以不写。
- with mysql_native_password 或者with caching_sha2_password :指定密码加密方式,可不填,默认caching_sha2_password。
#表示创建的新用户,名为test,这个新用户密码为123456,只允许本机登陆,加密方式caching_sha2_password
CREATE USER 'test'@'localhost' IDENTIFIED BY '123456';
#表示新创建的用户,名为test,这个用户密码为123456,可以从其他电脑远程登陆mysql所在服务器, 加密方式mysql_native_password
CREATE USER 'test'@'%' IDENTIFIED with mysql_native_password BY '123456';
//表示新创建的用户test,没有密码
CREATE USER 'test'@'%' ;
新建用户没有权限,因为还要为用户授予权限。
3.授权用户
GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION
- privileges:表示要授予什么权力,例如可以有 select , insert ,delete,update等,如果要授予全部权力,则填 ALL
- databasename.tablename:表示用户的权限能用在哪个库的哪个表中,如果想要用户的权限很作用于所有的数据库所有的表,则填 .,*是一个通配符,表示全部。
- ‘username’@‘host’:表示授权给哪个用户。
- WITH GRANT OPTION :用户能够给其他用户授权(慎用)
#表示给用户test授权,让test能给datatest中的march表 实行 insert 和 select。
GRANT select,insert ON datatest.march TO 'test'@'%';
#表示给用户test授权,让test能给所有库所有表实行所有的权力。
GRANT ALL ON *.* TO 'test'@'%';
#注意:用以上命令授权的用户不能给其他用户授权,如果想这个用户能够给其他用户授权,就要在后面加上 WITH GRANT OPTION
GRANT ALL ON *.* TO 'test'@'%' WITH GRANT OPTION;
4.设置加密规则与更改用户密码
ALTER USER 'username'@'host' IDENTIFIED WITH mysql_native_password BY 'password' ;
#修改test加密规则为mysql_native_password,密码为123456;
ALTER USER 'test'@'localhost' IDENTIFIED WITH mysql_native_password BY'123456';
#修改test密码为123456;
ALTER USER 'test'@'%' IDENTIFIED BY'123456' ;
5.撤销用户权限:
REVOKE privileges ON database.tablename FROM 'username'@'host';
赋权及撤销对应的库、表应该是一致的!!!
# 撤销test的插入权限
REVOKE insert ON *.* FROM 'test'@'%';
# 撤销test的查询权限
REVOKE select ON datatest.march FROM 'test'@'%';
注意:
若授予权利是这样写:GRANT select ON *.*TO 'test'@'%';
则用 REVOKE select ON datatest.march FROM 'test'@'%';
是不能撤销用户test对 datatest.march中的select 权利的。
反过来GRANT select ON datatest.march TO 'test'@'%';
授予权力
用 REVOKE select ON *.* FROM 'test'@'%';
也是不能用来撤销用户test对datatest库的march表的SELECT 权利的
6.删除用户
DROP USER 'username'@'host'
删除用户。
#表示删除用户test;
DROP USER 'test'@'%'
7.刷新权限
flush privileges;
命令本质上的作用是将当前user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里。
MySQL用户数据和权限有修改后,希望在"不重启MySQL服务"的情况下直接生效,那么就需要执行这个命令。