创建用户
创建 tom 用户 密码为 123 , 并且只有同网段可访问.
(root@localhost) [(none)]> create user tom@'192.168.239.%' identified by '123';
注意: 用户名 + @ + 访问方式 才是一个用户
tom@'192.168.239.131' 和 tom@'192.168.239.132' 不是同一个用户
identified by 后面为密码
用户名或者访问方式上的引号可以不加, 但是如果有特殊字符, 必须要加上.
查看用户信息
(root@localhost) [(none)]> select user,host,plugin from mysql.user;
user : 用户名
host : 连接方式 (%所有客户端都可访问, 192.168.239.% 同网段可访问, localhost 仅本地访问)
plugin : 密码加密插件
修改用户密码和连接方式
修改用户密码
将tom 的密码由123 改成 456
(root@localhost) [(none)]> alter user tom@'192.168.239.%' identified by '456';
注意 : 如果密码设置或修改失败, 可能是密码太简单导致, 需要修改MySQL密码设置限制,将等级调低.
修改用户连接方式
将tom 的允许同网段连接,改成允许所有连接(%)
(root@localhost) [(none)]> update mysql.user set host='%' where user = 'tom';
(root@localhost) [(none)]> flush privileges;
删除用户
删除 jery 用户
(root@localhost) [(none)]> drop user jery@'%';
查看用户权限
查看当前用户权限信息
(root@localhost) [(none)]> show grants;
查看指定用权限
(root@localhost) [(none)]> show grants for tom@'192.168.239.%';
授予权限
(root@localhost) [(none)]> grant select,update,insert on test.* to tom@'%';
- grant: 关键字
- test.*: 作用域,test库所有表
- 'tom'@'192.168.150.%': 哪个用户
授予所有权限
(root@localhost) [(none)]> grant all privileges on *.* to tom@'%';
授予用户授予其他用户权限的权限
(root@localhost) [performance_schema]> grant select ,update,insert,delete on test.* to 'tom'@'%' with grant option;
- with grant option : 授予tom用户授予权限的权限
删除用户权限
(root@localhost) [(none)]> revoke insert on test.* from tom@'%';
- 删除 insert 权限
删除授予权限
(root@localhost) [(none)]> revoke grant option on test.* from tom@'%';
删除所有权限
(root@localhost) [(none)]> revoke all on test.* from tom@'%';
- revoke仅删除权限, 不删除用户
- revoke all 后还是会有一个USAGE 权限
用户与角色
-- 创建role
create role dev;
grant all on test.* to dev with grant option;
-- 删除角色权限
revoke grant option on test.* from dev;
-- 用户与角色绑定
create user tom@'%' identified by '123';
grant dev to tom@'%';
-- 显示用户权限
show grants for 'dev1_tom'@'%';
show grants for 'dev1_tom'@'%' using dev;
-- 删除用户的角色
revoke dev from tom@'%';
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 可以跳过所有系统权限表而允许所有用户登录,只在特殊情况下暂时使用