K丶W

导航

 

MySQL权限工作原理

用户识别方式
  MySQL为了安全性考虑,采⽤主机名+⽤户名来判断⼀个⽤户的⾝份,因为在互联⽹中很难通过⽤户名来判断⼀个⽤户的⾝份,但是我们可以通过IP或者主机名判断⼀台机器,某个⽤户通过这个机器过来的,我们可以识别为⼀个⽤户,所以MySQL中采⽤⽤户名+主机名来识别⽤户的⾝份。当⼀个⽤户对MySQL发送指令的时候,MySQL就是通过⽤户名和来源(主机)来断定⽤户的权限。
权限验证方式

  1. 阶段1:连接数据库,此时MySQL会根据你的⽤户名及你的来源(IP或者主机名称)判断是否有权限连接
  2. 阶段2:对MySQL服务器发起请求操作,如CREATE TABLE、SELECT、DELETE、UPDATE、CREATE INDEX等操作,此时MySQL会判断你是否有权限操作这些指令

权限生效时间
  ⽤户及权限信息放在库名为mysql的库中,MySQL启动时,这些内容被读进内存并且从此时⽣效,所以如果通过直接操作这些表来修改⽤户及权限信息的,需要重启MySQL或者执⾏FLUSH PRIVILEDGE;才可以⽣效。⽤户登录之后,MySQL会和当前⽤户之间创建⼀个连接,此时⽤户相关的权限信息都保存在这个连接中,存放在内存中,此时如果有其他地⽅修改了当前⽤户的权限,这些变更的权限会在下⼀次登录时才会⽣效。

创建和删除用户及管理用户权限

  用户信息存储在mysql数据库下的user表中,表中User字段表示用户名,Host字段表示主机名,authcation_string字段表示登录密码。
可使用CREATE USER 和DROP USER来创建和删除用户,也可通过直接操纵表的方式来创建和删除用户

  • 查看MySQL中所有用户信息

  • 通过CREATE USER创建

  CREATE USER常用语法如下,详细语法可通过help CREATE USER命令查看。
CREATE USER <用户名>[@<主机名>] IDENTIFIED BY '<密码>';
示例:

  • 修改用户密码

  1. 通过SET PASSWORD 指令修改

  SET PASSWORD指令语法如下
SET PASSWORD [FOR <用户名@主机名>] auth_option [REPLACE '<当前密码>'] [RETAIN CURRENT PASSWORD];
其中auth_option: { = '<密码>'| TO RANDOM}

2. #### 通过操纵user表修改

注: 通过表修改需要FLUSH PRIVILEDGES或者重新登录才生效

  • 查看用户权限

  通过SHOW GRANTS命令查看,命令语法如下:
SHOW GRANTS [FOR <用户名@主机名>];
示例:

  • 授予用户权限

  使用GRANT命令来给用户授权,该命令常用语法如下,具体语法可使用help GRANT查看
GRANT priv_type[(<字段列表>)] [,priv_type[(<字段列表>)]]... ON priv_level TO <用户>[,<用户>]...
priv_type:{ALL |SELECT | INSERT | UPDATE | DELETE | CREATE | DROP | ALTER | 其他权限类型可查看手册}
priv_level: { *| *.* | db_name.* | db_name.tbl_name | tbl_name | db_name.routine_name}
示例:


  • 撤销用户权限

  使用REVOKE命令来给用户授权,该命令常用语法如下,具体语法可使用help GRANT查看
REVOKE priv_type[(<字段列表>)] [,priv_type[(<字段列表>)]]...ON priv_level FROM <用户>[,<用户>]...

  • 删除用户

1. 通过DEOP USER 删除用户

  DROP USER常用语法如下,详细语法可通过help DROP USER命令查看。
DROP USER <用户名>[@<主机名>]
示例:

2. 通过操纵user表删除用户

示例:

注: 通过表修改需要FLUSH PRIVILEDGES或者重新登录才生效

授权原则说明

  • 只授予能满⾜需要的最⼩权限,防⽌⽤户⼲坏事,⽐如⽤户只是需要查询,那就只给
    SELECT权限就可以了,不要给⽤户赋予UPDATE、INSERT或者DELETE权限
  • 创建⽤户的时候限制⽤户的登录主机,⼀般是限制成指定IP或者内⽹IP段
  • 初始化数据库的时候删除没有密码的⽤户,安装完数据库的时候会⾃动创建⼀些⽤
    户,这些⽤户默认没有密码
  • 为每个⽤户设置满⾜密码复杂度的密码
  • 定期清理不需要的⽤户,回收权限或者删除⽤户
posted on 2020-12-29 21:54  K丶W  阅读(113)  评论(0编辑  收藏  举报