密碼可以純文字形式寫在 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 Enterprise Audit 安全性考量」。
如果安裝了查詢重寫外掛程式,伺服器收到的陳述式可能會被改寫(請參閱查詢重寫外掛程式)。在這種情況下,--log-raw
選項會影響陳述式記錄,如下所示
密碼改寫的含義是,無法剖析的陳述式(例如,由於語法錯誤)不會寫入一般查詢記錄,因為無法知道它們是否不含密碼。需要記錄所有陳述式(包括帶有錯誤的陳述式)的使用案例應使用 --log-raw
選項,請記住,這也會略過密碼改寫。
密碼改寫僅在預期使用純文字密碼時發生。對於具有預期密碼雜湊值語法的陳述式,不會發生改寫。如果為此類語法錯誤地提供了純文字密碼,則會按給定的方式記錄密碼,而不會進行改寫。
為了保護日誌檔案免於未經授權的暴露,請將它們放置在限制僅伺服器和資料庫管理員可存取的目錄中。如果伺服器將日誌寫入 mysql
資料庫中的表格,請僅授予資料庫管理員對這些表格的存取權。
複本會在它們的連線中繼資料儲存庫中儲存複製來源伺服器的密碼,預設情況下,該儲存庫是 mysql
資料庫中名為 slave_master_info
的表格。在資料目錄中使用檔案作為連線中繼資料儲存庫的方法現已棄用,但仍然可行(請參閱第 19.2.4 節「中繼日誌和複製中繼資料儲存庫」)。請確保連線中繼資料儲存庫只能由資料庫管理員存取。除了將密碼儲存在連線中繼資料儲存庫中之外,另一種方法是使用 START REPLICA
或 START GROUP_REPLICATION
陳述式來指定連線到來源的憑證。
使用限制存取模式來保護包含日誌表格或包含密碼的日誌檔案的資料庫備份。