ALTER USER ... DEFAULT ROLE 定义当用户连接到服务器并进行身份验证时,或者当用户在会话期间执行 SET ROLE DEFAULT 语句时,哪些角色被激活。ALTER USER ... DEFAULT ROLE 是 SET DEFAULT ROLE 的替代语法。但是,ALTER USER 只能为单个用户设置默认值,而 SET DEFAULT ROLE 可以为多个用户设置默认值。另一方面,可以指定 CURRENT_USER 作为 ALTER USER 语句的用户名,而不能用于 SET DEFAULT ROLE。ALTER USER 'joe'@'10.0.0.1' DEFAULT ROLE administrator, developer;
复制
DEFAULT ROLE 关键字后面的子句允许这些值:● NONE:将默认值设置为 NONE(无角色)。● role [, role ] ...:将默认值设置为命名的角色,这些角色必须存在并在执行 ALTER USER ... DEFAULT ROLE 时赋予账户。除了通常的基于用户名和凭据的身份验证之外,MySQL 还可以检查 X.509 证书属性。要为 MySQL 帐户指定与 SSL/TLS 相关的选项,请使用 REQUIRE 子句指定一个或多个 tls_option 值。REQUIRE 选项的顺序无关紧要,但不能重复指定选项。在 REQUIRE 选项之间 AND 关键字是可选的。ALTER USER 允许以下这些 tls_option 值:指示由语句命名的所有帐户都不需要 SSL 或 X.509。如果用户名和密码有效,则允许未加密的连接。如果客户端拥有正确的证书和密钥文件,则可以根据客户机的选择使用加密连接。ALTER USER 'jeffrey'@'localhost' REQUIRE NONE;
复制
默认情况下,客户端尝试建立安全连接。对于有 REQUIRE NONE 设置的客户端,如果无法建立安全连接,则连接尝试会退回到未加密的连接。若要求加密连接,客户端只需指定 --ssl-mode=REQUIRED 选项;如果无法建立安全连接,则连接尝试将失败。ALTER USER 'jeffrey'@'localhost' REQUIRE SSL;
复制
默认情况下,客户端尝试建立安全连接。对于 REQUIRE SSL 帐户,如果无法建立安全连接,则连接尝试将失败。对于由语句指定的所有帐户,要求客户端提供有效的证书,但确切的证书、颁发者和主题无关紧要。唯一的要求是,应该可以用其中一个CA证书验证其签名。使用 X.509 证书总是意味着加密,因此在这种情况下不需要 SSL 选项。ALTER USER 'jeffrey'@'localhost' REQUIRE X509;
复制
对于带有 REQUIRE X509 的帐户,客户端连接必须要指定 --ssl-key 和 --ssl-cert 选项。(建议但不要求还指定 --ssl-ca,以便验证服务器提供的公共证书。)对于 ISSUER 和 SUBJECT 也是如此,因为那些 REQUIRE 选项暗示了 X509 的要求。对于由语句指定的所有帐户,要求客户端提供由 CA 'issuer' 颁发的有效 X.509 证书。如果客户端提供的证书有效,但具有不同的颁发者,则服务器将拒绝连接。使用 X.509 证书总是意味着加密,因此在这种情况下不需要 SSL 选项。ALTER USER 'jeffrey'@'localhost'
REQUIRE ISSUER '/C=SE/ST=Stockholm/L=Stockholm/
O=MySQL/CN=CA/emailAddress=ca@example.com';
复制
因为 ISSUER 意味着要求 X509,所以客户端必须指定 --ssl-key 和 --ssl-cert 选项来连接。(建议但不要求还指定 --ssl-ca,以便验证服务器提供的公共证书。)对于语句指定的所有帐户,要求客户端提供包含主题 subject 的有效 X.509 证书。如果客户端提供的证书有效但主题不同,则服务器会拒绝连接。使用 X.509 证书总是意味着加密,因此在这种情况下不需要 SSL 选项。ALTER USER 'jeffrey'@'localhost'
REQUIRE SUBJECT '/C=SE/ST=Stockholm/L=Stockholm/
O=MySQL demo client certificate/
CN=client/emailAddress=client@example.com';
复制
MySQL 将 'subject' 值与证书中的值进行简单的字符串比较,因此必须完全按照证书中的值给出字母大小写和顺序。因为 SUBJECT 说明了要求 X509,所以客户端必须指定 --ssl-key 和 --ssl-cert 选项来连接。(建议但不要求指定 --ssl-ca,以便验证服务器提供的公共证书。)对语句指定的所有帐户,需要特定的加密方法来加密连接。需要此选项以确保使用足够强度的密码和密钥长度。如果使用使用短加密密钥的旧算法,加密可能会很弱。ALTER USER 'jeffrey'@'localhost'
REQUIRE CIPHER 'EDH-RSA-DES-CBC3-SHA';
复制
SUBJECT、ISSUER 和 CIPHER 选项可以组合在 REQUIRE 子句中使用:ALTER USER 'jeffrey'@'localhost'
REQUIRE SUBJECT '/C=SE/ST=Stockholm/L=Stockholm/
O=MySQL demo client certificate/
CN=client/emailAddress=client@example.com'
AND ISSUER '/C=SE/ST=Stockholm/L=Stockholm/
O=MySQL/CN=CA/emailAddress=ca@example.com'
AND CIPHER 'EDH-RSA-DES-CBC3-SHA';
复制
可以对帐户使用服务器资源进行限制。为此,请使用 WITH 子句指定一个或多个 resource_option 值。WITH 选项的顺序无关紧要,但如果多次指定给定的资源限制,则最后一个实例优先。ALTER 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 明确指定帐户的限制。如果 count 为 0(默认值),服务器将根据 max_user_connections 系统变量的全局值确定帐户的同时连接数。如果 max_user_connections 也为零,则帐户没有限制。ALTER USER 'jeffrey'@'localhost'
WITH MAX_QUERIES_PER_HOUR 500 MAX_UPDATES_PER_HOUR 100;
复制
ALTER USER 为密码管理支持多个 password_option 值:● 密码过期选项:可以手动使帐户密码过期,并建立其密码过期策略。策略选项不会使密码过期。它们根据密码期限来确定服务器如何对帐户应用自动过期,密码期限是从最近帐户密码更改的日期和时间开始计算的。● 密码重用选项:可以根据密码更改的次数、经过的时间或这两者来限制密码重用。● 密码必需验证选项:可以指示更改帐户密码的尝试是否必须指定当前密码,以验证尝试进行更改的用户是否确实知道当前密码。● 错误密码登录失败跟踪选项:可以使服务器跟踪失败的登录尝试,并临时锁定给出太多连续错误密码的帐户。失败次数和锁定时间是可配置的。如果指定了给定类型的多个密码管理选项,则最后一个选项优先。例如,PASSWORD EXPIRE DEFAULT PASSWORD EXPIRE NEVER 与 PASSWORD EXPIRE NEVER 相同。如果帐户密码是手动过期的,或者根据自动过期策略认为密码期限大于其允许的生存期,则客户端的密码已过期。在这种情况下,服务器要么断开客户端的连接,要么限制其允许的操作。受限客户端执行的操作将导致错误,直到用户建立新的帐户密码。ALTER USER 允许使用这些 password_option 值来控制密码过期:ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE;
复制
● PASSWORD EXPIRE DEFAULT设置由语句指定的所有帐户应用由 default_password_lifetime 系统变量指定的全局过期策略。ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE DEFAULT;
复制
此过期选项将覆盖由该语句指定的所有帐户的全局策略。对于每个指定账户,它都禁用密码过期,这样密码就永远不会过期。ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE NEVER;
复制
● PASSWORD EXPIRE INTERVAL N DAY此过期选项将覆盖由该语句指定的所有帐户的全局策略。对于每个指定账户,它将密码有效期设置为 N 天。以下语句要求每 180 天更改一次密码:ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE INTERVAL 180 DAY;
复制
ALTER USER 允许这些 password_option 值根据所需的最少密码更改次数来控制以前密码的重用:● PASSWORD HISTORY DEFAULT设置由语句指定的所有帐户,以便应用有关密码历史记录长度的全局策略,以禁止在 password_option 系统变量指定的更改次数之前重用密码。ALTER USER 'jeffrey'@'localhost' PASSWORD HISTORY DEFAULT;
复制
由语句指定的所有帐户的历史长度选项将覆盖全局策略。对于每个账户,它将密码历史长度设置为 N 个密码,以禁止重用最近选择的 N 个密码中的任何一个。以下语句禁止重复使用前 6 个密码中的任何一个:ALTER USER 'jeffrey'@'localhost' PASSWORD HISTORY 6;
复制
ALTER USER 允许这些 password_option 值根据经过的时间控制以前密码的重用:● PASSWORD REUSE INTERVAL DEFAULT设置由语句指定的所有帐户应用有关已用时间的全局策略,禁止重用比 password_reuse_interval 系统变量指定的天数新的密码。ALTER USER 'jeffrey'@'localhost' PASSWORD REUSE INTERVAL DEFAULT;
复制
● PASSWORD REUSE INTERVAL N DAY此已用时间选项将覆盖由该语句指定的所有帐户的全局策略。对于每一个账户,它将密码重用间隔设置为 N 天,以禁止重用这多天之内的密码。以下声明禁止在 360 天内重复使用密码:ALTER USER 'jeffrey'@'localhost' PASSWORD REUSE INTERVAL 360 DAY;
复制
ALTER USER 允许这些 password_option 值控制更改帐户密码的尝试是否必须指定当前密码,以验证尝试更改的用户是否实际知道当前密码:● PASSWORD REQUIRE CURRENT此验证选项将覆盖由该语句指定的所有帐户的全局策略。对于每个账户,它要求密码更改要指定当前密码。ALTER USER 'jeffrey'@'localhost' PASSWORD REQUIRE CURRENT;
复制
● PASSWORD REQUIRE CURRENT OPTIONAL此验证选项将覆盖由该语句指定的所有帐户的全局策略。对于每个账户,它不要求更改密码指定当前密码。(可以提供当前密码,但不是必须提供。)ALTER USER 'jeffrey'@'localhost' PASSWORD REQUIRE CURRENT OPTIONAL;
复制
● PASSWORD REQUIRE CURRENT DEFAULT设置由语句指定的所有帐户,以便根据 password_require_current 系统变量的指定应用有关密码验证的全局策略。ALTER USER 'jeffrey'@'localhost' PASSWORD REQUIRE CURRENT DEFAULT;
复制
从 MySQL 8.0.19 开始,ALTER USER 允许使用以下 password_option 值来控制失败的登录跟踪:● FAILED_LOGIN_ATTEMPTS N是否跟踪错误密码的帐户登录尝试。N 必须是 0 到 32767 之间的数字。值 0 将禁用失败的登录跟踪。大于 0 的值表示有多少连续的密码失败导致临时帐户锁定(如果 PASSWORD_LOCK_TIME 也非零)。● PASSWORD_LOCK_TIME {N | UNBOUNDED}连续多次登录尝试提供不正确的密码后锁定帐户的时间。N 必须是 0 到 32767 之间的数字,或者是 UNBOUNDED。值为 0 将禁用临时帐户锁定。大于 0 的值表示以天为单位锁定帐户的时间。值 UNBOUNDED 会导致帐户锁定持续时间不受限制;一旦锁定,帐户将保持锁定状态,直到解锁。要进行失败的登录跟踪和临时锁定,帐户的 FAILED_LOGIN_ATTEMPTS 和 PASSWORD_LOCK_TIME 选项都必须为非零。以下语句修改帐户,使其在连续四次密码失败后保持锁定两天:ALTER USER 'jeffrey'@'localhost'
FAILED_LOGIN_ATTEMPTS 4 PASSWORD_LOCK_TIME 2;
复制
MySQL 支持使用 ACCOUNT LOCK 和 ACCOUNT UNLOCK 选项锁定和解锁帐户,这两个选项指定帐户的锁定状态。从 MySQL 8.0.19 开始,ALTER USER ... UNLOCK 语句解除对由于登录失败次数过多而临时锁定的由语句指定的帐户的锁定。如果 ALTER USER 成功,则将其写入二进制日志;如果失败,则不会写入二进制日志;在这种情况下,将发生回滚,并且不会进行任何更改。写入二进制日志的语句包含所有指定用户。如果给定了 IF EXISTS 子句,则这甚至包括不存在且未更改的用户。如果原始语句更改了用户的凭据,则写入二进制日志的语句将指定该用户适用的身份验证插件,确定如下:● 否则,如果用户存在,则为与用户帐户关联的插件;如果用户不存在,则为默认身份验证插件。(如果写入二进制日志的语句必须为用户指定特定的身份验证插件,请将其包含在原始语句中。)如果服务器在写入二进制日志的语句中为用户添加了默认的身份验证插件,它会向错误日志中写入一个警告,指出这些用户。如果原始语句指定 FAILED_LOGIN_ATTEMPTS 或 PASSWORD_LOCK_TIME 选项,则写入二进制日志的语句将包含该选项。https://dev.mysql.com/doc/refman/8.0/en/alter-user.html