可以對帳戶使用伺服器資源進行限制。要這麼做,可以使用 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 支持多個 password_option 值用於密碼管理:● 密碼過期選項:可以手動使帳戶密碼過期,並建立其密碼過期策略。策略選項不會使密碼過期。它們根據密碼期限來確定伺服器如何對帳戶應用自動過期,密碼期限是從最近帳戶密碼更改的日期和時間開始計算的。● 密碼重用選項:可以根據密碼更改的次數、經過的時間或結合這兩者來限制密碼重用。● 密碼驗證要求選項:可以指示更改帳戶密碼的嘗試是否必須指定當前密碼,以驗證嘗試進行更改的用戶是否確實知道當前密碼。● 密碼錯誤登錄失敗跟蹤選項:可以使伺服器跟蹤失敗登錄,並臨時鎖定提供過多連續錯誤密碼的帳戶。失敗次數和鎖定時間是可配置的。如果指定了給定類型的多個密碼管理選項,則最後一個選項優先。例如,PASSWORD EXPIRE DEFAULT PASSWORD EXPIRE NEVER 與 PASSWORD EXPIRE NEVER 相同。如果帳戶密碼是主動設置過期,或者根據自動過期策略認為密碼期限大於其允許的生存期,則客戶端的密碼過期。在這種情況下,伺服器要麼斷開客戶機的連接,要麼限制其操作。受限客戶端執行的操作將導致錯誤,直到用戶建立新的帳戶密碼。CREATE USER 允許以下這些 password_option 值用於控制密碼過期:CREATE USER 'jeffrey'@'localhost' PASSWORD EXPIRE;● PASSWORD EXPIRE DEFAULT設置語句指定的所有帳戶應用由 default_password_lifetime 系統變量指定的全局過期策略。CREATE USER 'jeffrey'@'localhost' PASSWORD EXPIRE DEFAULT;此過期選項將覆蓋由該語句指定的所有帳戶的全局策略。對於每個帳戶,它都禁用密碼過期,這樣密碼就永遠不會過期。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;此歷史長度選項將覆蓋由語句指定的所有帳戶的全局策略。對於每個帳戶,它將密碼歷史長度設置為 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 將禁用登錄失敗跟蹤。大於 0 的值表示多少連續的密碼失敗導致臨時鎖定帳戶(如果 PASSWORD_LOCK_TIME 也非零)。● PASSWORD_LOCK_TIME {N | UNBOUNDED}連續多次登錄提供不正確的密碼後鎖定帳戶的時間。N 必須是 0 到 32767 之間的數字,或者是 UNBOUNDED。值為 0 將禁用臨時帳戶鎖定。大於 0 的值表示以天為單位鎖定帳戶的時間。值 UNBOUNDED 表示帳戶鎖定持續時間不受限制;一旦鎖定,帳戶將保持鎖定狀態,直到解鎖。要進行登錄失敗跟蹤和臨時鎖定,帳戶的 FAILED_LOGIN_ATTEMPTS 和密 PASSWORD_LOCK_TIME 選項都必須為非零。以下語句創建的帳戶在連續四次密碼失敗後保持鎖定兩天:CREATE USER 'jeffrey'@'localhost' FAILED_LOGIN_ATTEMPTS 4 PASSWORD_LOCK_TIME 2;MySQL 支持使用 ACCOUNT LOCK 和 ACCOUNT UNLOCK 選項鎖定和解鎖帳戶,這兩個選項指定帳戶的鎖定狀態。如果語句成功,CREATE USER 將被寫入二進位日誌,但如果失敗則不會;失敗時將發生回滾,並且不會進行任何更改。寫入二進位日誌的語句包含所有指定用戶。如果給定了 IF NOT EXISTS 子句,則還包括已經存在所以未創建的用戶。寫入二進位日誌的語句為每個用戶指定一個身份驗證插件,確定如下:否則是默認的身份驗證插件。特別是,如果用戶 u1 已經存在並且使用了非默認的身份驗證插件,那麼 CREATE USER IF NOT EXISTS u1 的二進位日誌的語句將指定為默認的身份驗證插件。(如果寫入二進位日誌的語句必須為用戶指定非默認身份驗證插件,請將其包含在原始語句中。)● 如果伺服器為不存在的用戶添加默認的身份驗證插件的語句寫入二進位日誌,它會向錯誤日誌中寫入一個警告,記錄這些用戶。如果原始語句指定了 FAILED_LOGIN_ATTEMPTS 或 PASSWORD_LOCK_TIME 選項,則寫入二進位日誌的語句將包含這些選項。https://dev.mysql.com/doc/refman/8.0/en/create-user.html