連線至 MySQL 伺服器的用戶端所需憑證可以包含密碼。本節說明如何為 MySQL 帳戶指派密碼。
MySQL 將憑證儲存在 mysql
系統資料庫的 user
表格中。只有具有 CREATE USER
權限的使用者,或具有 mysql
資料庫權限的使用者,才能執行指派或修改密碼的作業(建立新帳戶的 INSERT
權限、修改現有帳戶的 UPDATE
權限)。如果啟用 read_only
系統變數,則使用帳戶修改陳述式,例如 CREATE USER
或 ALTER USER
,還需要 CONNECTION_ADMIN
權限(或已淘汰的 SUPER
權限)。
此處的討論僅摘要說明最常見的密碼指派陳述式語法。如需其他可能性的完整詳細資料,請參閱 第 15.7.1.3 節「CREATE USER 陳述式」、第 15.7.1.1 節「ALTER USER 陳述式」 和 第 15.7.1.10 節「SET PASSWORD 陳述式」。
MySQL 使用外掛程式來執行用戶端驗證;請參閱 第 8.2.17 節「可外掛驗證」。在指派密碼的陳述式中,與帳戶相關聯的驗證外掛程式會執行指定之明文密碼所需的任何雜湊。這可讓 MySQL 在將密碼儲存在 mysql.user
系統表格中之前混淆密碼。對於此處描述的陳述式,MySQL 會自動雜湊指定的密碼。也有 CREATE USER
和 ALTER USER
的語法,允許以字面指定雜湊值。如需詳細資訊,請參閱這些陳述式的描述。
若要在您建立新帳戶時指派密碼,請使用 CREATE USER
並包含 IDENTIFIED BY
子句
CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'password';
CREATE USER
也支援指定帳戶驗證外掛程式的語法。請參閱 第 15.7.1.3 節「CREATE USER 陳述式」。
若要為現有帳戶指派或變更密碼,請使用帶有 IDENTIFIED BY
子句的 ALTER USER
陳述式。
ALTER USER 'jeffrey'@'localhost' IDENTIFIED BY 'password';
如果您不是以匿名使用者連線,您可以變更自己的密碼,而無需明確指定自己的帳戶名稱。
ALTER USER USER() IDENTIFIED BY 'password';
若要從命令列變更帳戶密碼,請使用 mysqladmin 命令。
mysqladmin -u user_name -h host_name password "password"
此命令設定密碼的帳戶是 mysql.user
系統表格中,User
欄位中與 user_name
相符,且 Host
欄位中與您連線的用戶端主機 相符 的資料列所代表的帳戶。
使用 mysqladmin 設定密碼應視為 不安全 的做法。在某些系統上,您的密碼會對系統狀態程式(例如 ps)可見,其他使用者可能會呼叫這些程式來顯示命令列。MySQL 用戶端通常會在初始化序列期間以零覆寫命令列密碼參數。但是,仍然有一個短暫的時間間隔,在此期間該值是可見的。此外,在某些系統上,此覆寫策略無效,密碼仍對 ps 可見。(SystemV Unix 系統以及其他系統可能都有這個問題。)
如果您使用 MySQL 複寫,請注意,複本在 CHANGE REPLICATION SOURCE TO
中使用的密碼實際上會限制為 32 個字元長度;如果密碼較長,則會截斷任何多餘的字元。這不是由於 MySQL 伺服器通常施加的任何限制,而是 MySQL 複寫特有的問題。