連線至 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 複寫特有的問題。