密碼可以純文字的形式寫在 SQL 陳述式中,例如 CREATE USER
、GRANT
和 SET PASSWORD
。如果 MySQL 伺服器按原樣記錄這些陳述式,則任何有權存取日誌的人都可以看到其中的密碼。
陳述式記錄會避免以下陳述式以純文字形式寫入密碼
CREATE USER ... IDENTIFIED BY ...
ALTER USER ... IDENTIFIED BY ...
SET PASSWORD ...
START REPLICA ... PASSWORD = ...
CREATE SERVER ... OPTIONS(... PASSWORD ...)
ALTER SERVER ... OPTIONS(... PASSWORD ...)
這些陳述式中的密碼會被改寫,使其不會以文字形式出現在寫入一般查詢日誌、慢查詢日誌和二進位日誌的陳述式文字中。改寫不適用於其他陳述式。特別是,對於引用文字密碼的 mysql.user
系統表格的 INSERT
或 UPDATE
陳述式會按原樣記錄,因此您應避免使用此類陳述式。(無論如何,都不建議直接修改授權表格。)
對於一般查詢日誌,可以使用 --log-raw
選項啟動伺服器來抑制密碼改寫。基於安全考量,不建議在生產環境中使用此選項。為了進行診斷,查看伺服器接收的確切陳述式文字可能很有用。
預設情況下,稽核日誌外掛程式產生的稽核日誌檔案內容未加密,並且可能包含敏感資訊,例如 SQL 陳述式的文字。基於安全考量,稽核日誌檔案應寫入只有 MySQL 伺服器和具有查看日誌合理原因的使用者才能存取的目錄中。請參閱章節 8.4.5.3,「MySQL 企業稽核安全性考量」。
如果安裝了查詢改寫外掛程式,則伺服器接收的陳述式可能會被改寫(請參閱查詢改寫外掛程式)。在這種情況下,--log-raw
選項會以下列方式影響陳述式記錄
密碼改寫的含義是無法剖析的陳述式(例如,由於語法錯誤)不會寫入一般查詢日誌,因為無法確定它們是否不包含密碼。需要記錄所有陳述式(包括有錯誤的陳述式)的使用案例應使用 --log-raw
選項,請注意,這也會繞過密碼改寫。
密碼改寫僅在預期使用純文字密碼時發生。對於語法預期密碼雜湊值的陳述式,不會發生改寫。如果為此類語法錯誤地提供了純文字密碼,則該密碼會按給定的方式記錄,而不進行改寫。
為了保護日誌檔案免於未經授權的存取,請將它們放置在一個限制伺服器和資料庫管理員存取權的目錄中。如果伺服器將日誌寫入 mysql
資料庫中的資料表,請僅授予資料庫管理員對這些資料表的存取權。
複本會在它們的連線中繼資料儲存庫中儲存複寫來源伺服器的密碼,預設情況下,這是一個名為 slave_master_info
的 mysql
資料庫中的資料表。現在已不建議使用資料目錄中的檔案作為連線中繼資料儲存庫,但仍有可能使用(請參閱第 19.2.4 節,「中繼日誌和複寫中繼資料儲存庫」)。請確保只有資料庫管理員可以存取連線中繼資料儲存庫。除了將密碼儲存在連線中繼資料儲存庫中之外,另一種替代方法是使用 START REPLICA
或 START GROUP_REPLICATION
陳述式來指定連線到來源的認證。
使用受限存取模式來保護包含密碼的日誌表或日誌檔的資料庫備份。