在 MySQL 用戶端和伺服器之間使用未加密的連線,任何有權存取網路的人都可能監視您的所有流量,並檢查在用戶端和伺服器之間傳送或接收的資料。
當您必須以安全的方式在網路上傳輸資訊時,未加密的連線是不可接受的。為了使任何資料無法讀取,請使用加密。加密演算法必須包含安全性元素,以抵禦許多已知的攻擊,例如變更加密訊息的順序或重複播放資料兩次。
MySQL 支援使用 TLS(傳輸層安全性)通訊協定在用戶端和伺服器之間的加密連線。TLS 有時稱為 SSL(安全通訊端層),但 MySQL 實際上並未使用 SSL 通訊協定進行加密連線,因為其加密很弱(請參閱 第 8.3.2 節,「加密連線 TLS 通訊協定和密碼」)。
TLS 使用加密演算法來確保可以信任透過公共網路接收的資料。它具有偵測資料變更、遺失或重播的機制。TLS 也納入了使用 X.509 標準提供身分驗證的演算法。
X.509 使在網際網路上識別某人成為可能。基本上,應該有一個稱為 「憑證授權單位」 (或 CA) 的實體,該實體會將電子憑證指派給任何需要它們的人。憑證依賴於具有兩個加密金鑰(公開金鑰和私密金鑰)的非對稱加密演算法。憑證擁有者可以將憑證出示給另一方,作為身分證明。憑證包含其擁有者的公開金鑰。使用此公開金鑰加密的任何資料只能使用對應的私密金鑰解密,該私密金鑰由憑證的擁有者持有。
MySQL 中對加密連線的支援是使用 OpenSSL 提供的。如需有關 OpenSSL 支援的加密通訊協定和密碼的資訊,請參閱 第 8.3.2 節,「加密連線 TLS 通訊協定和密碼」。
根據預設,MySQL 執行個體會在執行階段連結至可用的已安裝 OpenSSL 程式庫,以支援加密連線和其他與加密相關的操作。您可以從原始碼編譯 MySQL,並使用 WITH_SSL
CMake 選項來指定特定已安裝 OpenSSL 版本或替代 OpenSSL 系統套件的路徑。在這種情況下,MySQL 會選取該版本。如需執行此動作的指示,請參閱 第 2.8.6 節,「設定 SSL 程式庫支援」。
您可以使用 Tls_library_version
系統狀態變數檢查執行階段正在使用的 OpenSSL 程式庫版本。
如果您使用某個版本的 OpenSSL 編譯了 MySQL,並且想要在不重新編譯的情況下變更為其他版本,您可以編輯動態函式庫載入路徑(在 Unix 系統上為 LD_LIBRARY_PATH
,在 Windows 系統上為 PATH
)來達成此目的。移除已編譯的 OpenSSL 版本的路徑,並加入替換版本的路徑,並將其置於路徑上任何其他 OpenSSL 函式庫之前。在啟動時,當 MySQL 無法在路徑上找到使用 WITH_SSL
指定的 OpenSSL 版本時,它會改為使用路徑上指定的第一個版本。
預設情況下,如果伺服器支援加密連線,MySQL 程式會嘗試使用加密連線,如果無法建立加密連線,則會退回使用未加密連線。關於影響加密連線使用的選項資訊,請參閱第 8.3.1 節,「設定 MySQL 使用加密連線」 和 加密連線的指令選項。
MySQL 會針對每個連線執行加密,並且針對特定使用者的加密使用可以是選擇性的或強制性的。這讓您可以根據個別應用程式的需求選擇加密或未加密連線。關於如何要求使用者使用加密連線的資訊,請參閱 CREATE USER
陳述式的 REQUIRE
子句在第 15.7.1.3 節,「CREATE USER 陳述式」 中的討論。另請參閱 require_secure_transport
系統變數在第 7.1.8 節,「伺服器系統變數」中的說明。
加密連線可用於來源伺服器和複本伺服器之間。請參閱第 19.3.1 節,「設定複寫以使用加密連線」。
關於從 MySQL C API 使用加密連線的資訊,請參閱加密連線支援。
也可以透過與 MySQL 伺服器主機的 SSH 連線使用加密連線。例如,請參閱第 8.3.4 節,「從 Windows 使用 SSH 遠端連線至 MySQL」。