WHCSRL 技术网

MySQL8.0用户权限管理

创建用户

创建 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 的允许同网段连接,改成允许所有连接(%%)

  1. (root@localhost) [(none)]> update mysql.user set host='%%' where user = 'tom';
  2. (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)]> show grants for 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 可以跳过所有系统权限表而允许所有用户登录,只在特殊情况下暂时使用

 

推荐阅读