文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  SET PASSWORD 陳述式

15.7.1.10 SET PASSWORD 陳述式

SET PASSWORD [FOR user] auth_option
    [REPLACE 'current_auth_string']
    [RETAIN CURRENT PASSWORD]

auth_option: {
    = 'auth_string'
  | TO RANDOM
}

SET PASSWORD 語句會為 MySQL 使用者帳戶指派密碼。密碼可以明確地在語句中指定,也可以由 MySQL 隨機產生。該語句還可以包含一個密碼驗證子句,用於指定要替換的帳戶目前密碼,以及一個用於管理帳戶是否具有第二密碼的子句。'auth_string''current_auth_string' 各自代表一個明文(未加密)的密碼。

注意

相較於使用 SET PASSWORD 來指派密碼,ALTER USER 是修改帳戶的首選語句,包括指派密碼。例如:

ALTER USER user IDENTIFIED BY 'auth_string';
注意

隨機密碼產生、密碼驗證和第二密碼的子句僅適用於使用將憑證內部儲存在 MySQL 中的驗證外掛程式的帳戶。對於使用針對 MySQL 外部憑證系統執行驗證的外掛程式的帳戶,密碼管理也必須在該系統外部進行處理。有關內部憑證儲存的詳細資訊,請參閱第 8.2.15 節,「密碼管理」

REPLACE 'current_auth_string' 子句執行密碼驗證。如果給定

  • REPLACE 指定要替換的帳戶目前密碼,以明文(未加密)字串表示。

  • 如果要求帳戶的密碼變更必須指定目前密碼,以驗證嘗試進行變更的使用者確實知道目前密碼,則必須提供此子句。

  • 如果帳戶的密碼變更可以但不需要指定目前密碼,則此子句為選用。

  • 即使子句是選用的,如果給定但與目前密碼不符,該語句也會失敗。

  • 只有在變更目前使用者的帳戶密碼時,才能指定 REPLACE

有關透過指定目前密碼進行密碼驗證的詳細資訊,請參閱第 8.2.15 節,「密碼管理」

RETAIN CURRENT PASSWORD 子句實作雙密碼功能。如果給定

  • RETAIN CURRENT PASSWORD 會將帳戶的目前密碼保留為其第二密碼,並取代任何現有的第二密碼。新密碼會成為主要密碼,但用戶端可以使用主要或第二密碼來使用該帳戶連線到伺服器。(例外情況:如果 SET PASSWORD 語句指定的新密碼為空,則即使給定 RETAIN CURRENT PASSWORD,第二密碼也會變成空。)

  • 如果您為主要密碼為空的帳戶指定 RETAIN CURRENT PASSWORD,該語句將會失敗。

  • 如果帳戶有第二密碼,而且您變更其主要密碼時未指定 RETAIN CURRENT PASSWORD,則第二密碼會保持不變。

有關使用雙密碼的詳細資訊,請參閱第 8.2.15 節,「密碼管理」

SET PASSWORD 允許使用這些 auth_option 語法:

  • = 'auth_string'

    將給定的文字密碼指派給帳戶。

  • TO RANDOM

    將由 MySQL 隨機產生的密碼指派給帳戶。該語句也會在結果集中傳回明文密碼,以使其可供執行該語句的使用者或應用程式使用。

    有關結果集和隨機產生密碼特性的詳細資訊,請參閱隨機密碼產生

重要

在某些情況下,SET PASSWORD 可能會記錄在伺服器記錄檔中,或在用戶端上的歷史記錄檔中,例如 ~/.mysql_history,這表示任何具有該資訊讀取權限的人員都可以讀取明文密碼。有關此情況在伺服器記錄檔中發生的條件以及如何控制它的資訊,請參閱第 8.1.2.3 節,「密碼和記錄」。有關用戶端記錄的類似資訊,請參閱第 6.5.1.3 節,「mysql 用戶端記錄」

SET PASSWORD 可以搭配或不搭配明確命名使用者帳戶的 FOR 子句使用:

  • 如果使用 FOR user 子句,則該語句會為指定的帳戶設定密碼,且該帳戶必須存在。

    SET PASSWORD FOR 'jeffrey'@'localhost' = 'auth_string';
  • 如果不使用 FOR user 子句,則該語句會為目前使用者設定密碼。

    SET PASSWORD = 'auth_string';

    任何使用非匿名帳戶連線到伺服器的用戶端都可以變更該帳戶的密碼。(特別是,您可以變更自己的密碼。)若要查看伺服器驗證您為哪個帳戶,請呼叫 CURRENT_USER() 函數。

    SELECT CURRENT_USER();

如果給定 FOR user 子句,則帳戶名稱會使用第 8.2.4 節,「指定帳戶名稱」中所述的格式。例如:

SET PASSWORD FOR 'bob'@'%.example.org' = 'auth_string';

如果省略帳戶名稱的主機名稱部分,則預設為 '%'

SET PASSWORD 會將字串解譯為明文字串,並將其傳遞給與帳戶關聯的驗證外掛程式,然後將外掛程式傳回的結果儲存在 mysql.user 系統資料表中的帳戶列中。(外掛程式有機會將值雜湊成其預期的加密格式。外掛程式可能會按指定方式使用該值,在這種情況下不會進行雜湊。)

為指定的帳戶設定密碼(使用 FOR 子句)需要 mysql 系統綱要的 UPDATE 權限。為自己設定密碼(針對非匿名帳戶,不使用 FOR 子句)不需要任何特殊權限。

修改第二密碼的語句需要以下權限:

當啟用 read_only 系統變數時,SET PASSWORD 除了任何其他所需權限之外,還需要 CONNECTION_ADMIN 權限(或已棄用的 SUPER 權限)。

有關設定密碼和驗證外掛程式的詳細資訊,請參閱第 8.2.14 節,「指派帳戶密碼」第 8.2.17 節,「可插拔驗證」