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
子句,則帳戶名稱會使用第 8.2.4 節,「指定帳戶名稱」中所述的格式。例如:user
SET PASSWORD FOR 'bob'@'%.example.org' = 'auth_string';
如果省略帳戶名稱的主機名稱部分,則預設為 '%'
。
SET PASSWORD
會將字串解譯為明文字串,並將其傳遞給與帳戶關聯的驗證外掛程式,然後將外掛程式傳回的結果儲存在 mysql.user
系統資料表中的帳戶列中。(外掛程式有機會將值雜湊成其預期的加密格式。外掛程式可能會按指定方式使用該值,在這種情況下不會進行雜湊。)
為指定的帳戶設定密碼(使用 FOR
子句)需要 mysql
系統綱要的 UPDATE
權限。為自己設定密碼(針對非匿名帳戶,不使用 FOR
子句)不需要任何特殊權限。
修改第二密碼的語句需要以下權限:
APPLICATION_PASSWORD_ADMIN
權限是用於對自己的帳戶使用SET PASSWORD
語句的RETAIN CURRENT PASSWORD
子句所必需的。需要此權限來操作您自己的第二密碼,因為大多數使用者只需要一個密碼。如果要允許帳戶操作所有帳戶的第二密碼,則應授予其
CREATE USER
權限,而不是APPLICATION_PASSWORD_ADMIN
權限。
當啟用 read_only
系統變數時,SET PASSWORD
除了任何其他所需權限之外,還需要 CONNECTION_ADMIN
權限(或已棄用的 SUPER
權限)。
有關設定密碼和驗證外掛程式的詳細資訊,請參閱第 8.2.14 節,「指派帳戶密碼」和第 8.2.17 節,「可插拔驗證」。