CREATE USER 资源限制选项

 可以对账户使用服务器资源进行限制。要这么做,可以使用 WITH 子句指定一个或多个 resource_option 值。 WITH 选项的顺序无关紧要,但如果多次指定给定的资源限制,则最后一个实例优先。 CREATE USER 允许以下这些 resource_option 值: ● MAX_QUERIES_PER_HOUR count, MAX_UPDATES_PER_HOUR count, MAX_CONNECTIONS_PER_HOUR count 对于语句指定的所有帐户,这些选项限制在一小时内允许每个帐户对服务器进行多少查询、更新和连接。如果 count 0(默认值),则表示该帐户没有限制。 ● MAX_USER_CONNECTIONS count 对于语句指定的所有帐户,限制每个帐户同时连接到服务器的最大数目。非零数明确指定帐户的限制。如果 count 0(默认值),服务器将根据max_user_connections 系统变量的全局值确定帐户的同时连接数。如果max_user_connections 也为零,则帐户没有限制。 示例: 



CREATE USER 'jeffrey'@'localhost'  WITH MAX_QUERIES_PER_HOUR 500 MAX_UPDATES_PER_HOUR 100;
 
CREATE USER 密码管理选项 CREATE USER 支持多个 password_option 值用于密码管理: ● 密码过期选项:可以手动使帐户密码过期,并建立其密码过期策略。策略选项不会使密码过期。它们根据密码期限来确定服务器如何对帐户应用自动过期,密码期限是从最近帐户密码更改的日期和时间开始计算的。 ● 密码重用选项:可以根据密码更改的次数、经过的时间或结合这两者来限制密码重用。 ● 密码验证要求选项:可以指示更改帐户密码的尝试是否必须指定当前密码,以验证尝试进行更改的用户是否确实知道当前密码。 ● 密码错误登录失败跟踪选项:可以使服务器跟踪失败登录,并临时锁定提供过多连续错误密码的帐户。失败次数和锁定时间是可配置的。 本节介绍密码管理选项的语法。 如果指定了给定类型的多个密码管理选项,则最后一个选项优先。例如,PASSWORD EXPIRE DEFAULT PASSWORD EXPIRE NEVER 与 PASSWORD EXPIRE NEVER 相同。 如果帐户密码是主动设置过期,或者根据自动过期策略认为密码期限大于其允许的生存期,则客户端的密码过期。在这种情况下,服务器要么断开客户机的连接,要么限制其操作。受限客户端执行的操作将导致错误,直到用户建立新的帐户密码。 CREATE USER 允许以下这些 password_option 值用于控制密码过期: ● PASSWORD EXPIRE 立即将语句指定的所有帐户的密码标记为过期。 

CREATE USER 'jeffrey'@'localhost' PASSWORD EXPIRE;
 
● PASSWORD EXPIRE DEFAULT 设置语句指定的所有帐户应用由 default_password_lifetime 系统变量指定的全局过期策略。 

CREATE USER 'jeffrey'@'localhost' PASSWORD EXPIRE DEFAULT;
 
● PASSWORD EXPIRE NEVER 此过期选项将覆盖由该语句指定的所有帐户的全局策略。对于每个账户,它都禁用密码过期,这样密码就永远不会过期。 

CREATE USER 'jeffrey'@'localhost' PASSWORD EXPIRE NEVER;
 
● PASSWORD EXPIRE INTERVAL N DAY 此过期选项将覆盖由该语句指定的所有帐户的全局策略。对于每个账户,它将密码生存期设置为 N 天。以下语句要求每180天更改一次密码: 

CREATE USER 'jeffrey'@'localhost' PASSWORD EXPIRE INTERVAL 180 DAY;
 
CREATE USER 允许以下这些 password_option 值根据所需的最少密码更改次数控制以前密码的重用: ● PASSWORD HISTORY DEFAULT 设置语句指定的所有帐户应用有关密码历史记录长度的全局策略,以禁止在 password_history 系统变量指定的更改次数之前重用密码。 

CREATE USER 'jeffrey'@'localhost' PASSWORD HISTORY DEFAULT;
 
● PASSWORD HISTORY N 此历史长度选项将覆盖由语句指定的所有帐户的全局策略。对于每个账户,它将密码历史长度设置为 N,以禁止重用最近选择的 N 个密码中的任何一个。以下语句禁止重复使用前 6 个密码中的任何一个: 

CREATE USER 'jeffrey'@'localhost' PASSWORD HISTORY 6;
 
CREATE USER 允许以下这些 password_option 值用于根据时间控制以前密码的重用: ● PASSWORD REUSE INTERVAL DEFAULT 设置由语句指定的所有账户应用有关已用时间的全局策略,以禁止重用比 password_reuse_interval 系统变量指定的天数少的密码。 

CREATE USER 'jeffrey'@'localhost' PASSWORD REUSE INTERVAL DEFAULT;
 
● PASSWORD REUSE INTERVAL N DAY 此已过时间选项将覆盖由该语句指定的所有帐户的全局策略。对于每一个账户,它将密码重用间隔设置为 N 天,以禁止重用这么多天以内更新的密码。以下语句禁止在 360 天内重复使用密码: 

CREATE USER 'jeffrey'@'localhost' PASSWORD REUSE INTERVAL 360 DAY;
 
CREATE USER 允许以下这些 password_option 值,用于控制更改帐户密码是否必须指定当前密码,以验证尝试更改的用户是否真正知道当前密码: ● PASSWORD REQUIRE CURRENT 此验证选项将覆盖由该语句指定的所有帐户的全局策略。对于每个账户,它要求更改密码要指定当前密码。 

CREATE USER 'jeffrey'@'localhost' PASSWORD REQUIRE CURRENT;
 
● PASSWORD REQUIRE CURRENT OPTIONAL 此验证选项将覆盖由该语句指定的所有帐户的全局策略。对于每个账户,它不要求更改密码时指定当前密码。(可以提供当前密码,但不是必须的。) 

CREATE USER 'jeffrey'@'localhost' PASSWORD REQUIRE CURRENT OPTIONAL;
 
● PASSWORD REQUIRE CURRENT DEFAULT 设置由语句指定的所有帐户应用 password_require_current 系统变量指定的有关密码验证的全局策略。 

CREATE USER 'jeffrey'@'localhost' PASSWORD REQUIRE CURRENT DEFAULT;
 
 MySQL 8.0.19 开始,CREATE USER 允许以下这些password_option 值来控制登录失败跟踪: ● FAILED_LOGIN_ATTEMPTS N 是否跟踪密码错误的帐户登录。N 必须是 0 到 32767 之间的数字。值 0将禁用登录失败跟踪。大于 的值表示多少连续的密码失败导致临时锁定帐户(如果 PASSWORD_LOCK_TIME 也非零)。  ● PASSWORD_LOCK_TIME {N | UNBOUNDED} 连续多次登录提供不正确的密码后锁定帐户的时间。N 必须是 0 32767 之间的数字,或者是 UNBOUNDED。值为 将禁用临时帐户锁定。大于 的值表示以天为单位锁定帐户的时间。值 UNBOUNDED 表示帐户锁定持续时间不受限制;一旦锁定,帐户将保持锁定状态,直到解锁。 要进行登录失败跟踪和临时锁定,帐户的 FAILED_LOGIN_ATTEMPTS 和密PASSWORD_LOCK_TIME 选项都必须为非零。以下语句创建的帐户在连续四次密码失败后保持锁定两天: 


CREATE USER 'jeffrey'@'localhost'  FAILED_LOGIN_ATTEMPTS 4 PASSWORD_LOCK_TIME 2;
 
CREATE USER 帐户锁定选项 MySQL 支持使用 ACCOUNT LOCK 和 ACCOUNT UNLOCK 选项锁定和解锁帐户,这两个选项指定帐户的锁定状态。 如果指定了多个帐户锁定选项,则最后一个选项优先。 CREATE USER 二进制日志 如果语句成功,CREATE USER 将被写入二进制日志,但如果失败则不会;失败时将发生回滚,并且不会进行任何更改。写入二进制日志的语句包含所有指定用户。如果给定了 IF NOT EXISTS 子句,则还包括已经存在所以未创建的用户。 写入二进制日志的语句为每个用户指定一个身份验证插件,确定如下: ● 在原始语句中指定的插件(如果指定了插件)。 否则是默认的身份验证插件。特别是,如果用户 u1 已经存在并且使用了非默认的身份验证插件,那么 CREATE USER IF NOT EXISTS u1 的二进制日志的语句将指定为默认的身份验证插件。(如果写入二进制日志的语句必须为用户指定非默认身份验证插件,请将其包含在原始语句中。) ● 如果服务器为不存在的用户添加默认的身份验证插件的语句写入二进制日志,它会向错误日志中写入一个警告,记录这些用户。 如果原始语句指定了 FAILED_LOGIN_ATTEMPTS 或 PASSWORD_LOCK_TIME选项,则写入二进制日志的语句将包含这些选项。