创建用户的语句基本格式为:

create user if not exists ‘username’@’ip’ identified with mysql_native_password by pwd

创建仅本地localhost访问用户

方法:create user if not exists ‘username’@’localhost’ identified with mysql_native_password by pwd

示例,如下语句创建只能在本机localhost登陆访问数据的用户user_local。

  1. create user if not exists 'user_local'@'localhost' identified with mysql_native_password by '6xJIugYIEfs6zMY5'

该方法创建的

  • 用户名为user_local。
  • ip为localhost,即只能在本机上访问数据。
  • 密码为6xJIugYIEfs6zMY5。
  • 身份验证方式为默认的mysql_native_password。

    创建指定ip访问用户

    方法:通过设置ip范围,以通配符%表示任意主机ip。

示例,如下语句创建只能在10.123打头的ip登陆访问数据的用户user_ip_limit。

create user if not exists 'user_ip_limit'@'10.123.%.%' identified with mysql_native_password by '6xJIugYIEfs6zMY5'

创建任意ip访问用户

方法:以通配符%表示任意主机ip。

示例,如下语句创建可以在任意ip登陆访问数据的用户user_no_limit。

create user if not exists 'user_no_limit'@'%' identified with mysql_native_password by '6xJIugYIEfs6zMY5'

设置密码有效期

在工作开发中,会出现以下场景。
场景1:要求开发人员首次必须修改密码才能继续使用。
场景2:开发人员长时间使用同一个密码会存在安全风险,则我们可以指定其每隔90天必须修改一次密码才能继续使用。

首次必须修改密码

针对场景1,我们创建一个有过期密码的用户,当开发人员第一次登陆并尝试任何语句时,都会抛出错误。只有当其通过「alter user」语句重置密码后才能继续使用mysql。

方法:创建用户时增加了关键词「password expire」 格式:create user ‘username’@’ip’ identified with mysql_native_password by pwd password expire;

  1. 创建用户
    create user 'developer'@'%'
    identified with mysql_native_password by 'S&oMWhhIPax!z1Z9' password expire;
    

由于创建用户时增加了关键词「password expire」,第一次登陆时,执行任何语句都会抛出错误,开发人员必须使用以下语句更新密码。
image.png

alter user 'developer'@'%'
identified with mysql_native_password by '4!qosZ2&E1nc3*JJ';

image.png

每隔90天必须修改一次密码才能继续使用

针对场景2,我们要求用户每隔90天更改一次密码。

方法:alter user ‘username’@’ip’ password expire interval 90 day;

示例代码如下,先创建好一个用户,再使用alter语句设置。

alter user 'developer'@'%' password expire interval 90 day;

备注

  1. 创建用户时,当前登录使用的用户必须拥有创建用户的权限。如root、dbadmin(自己创建)用户。
  2. 随机生成密码方式,可以使用生成随机密码网站在线生成。

image.png

  1. 其他常用参数
    1. max_queries_per_hour,用户每小时执行的最大查询数
    2. max_updates_per_hour,用户每小时执行的最大更新次数

如,

create user if not exists 'readonly'@'localhost' 
identified with mysql_native_password by 'readonlyuser'
with max_queries_per_hour 500
max_updates_per_hour 100;

以上内容进行解释:

  • 第1行指定了用户名和限制IP范围的访问。如该句表示创建一个名为readonly的用户,且该用户只能从localhost进行访问
  • 第2行为用户创建密码为「readonlyuser」。
  • 第3行表示用户每小时执行的最大查询数为500,该部分可以不设置。
  • 第4行表示用户每小时执行的最大更新次数为100,该部分亦可不进行设置,保持默认即可。