相關文件 下載本手冊
PDF (美國信紙尺寸) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  MySQL 8.4 常見問題  /  MySQL 8.4 常見問題:安全性

A.9 MySQL 8.4 常見問題:安全性

A.9.1. 在哪裡可以找到關於 MySQL 安全性問題的文件?
A.9.2. MySQL 8.4 中的預設驗證外掛程式是什麼?
A.9.3. MySQL 是否原生支援 SSL?
A.9.4. SSL 支援是否內建於 MySQL 二進位檔中,還是我必須自己重新編譯二進位檔才能啟用它?
A.9.5. MySQL 是否內建針對 LDAP 目錄的驗證?
A.9.6. MySQL 是否包含基於角色的存取控制 (RBAC) 的支援?
A.9.7. MySQL 是否支援 TLS 1.0 和 1.1?

A.9.1.

在哪裡可以找到關於 MySQL 安全性問題的文件?

最佳的起點是 第 8 章,安全性

您可能會發現 MySQL 文件中其他部分對於特定安全性問題也很有用,包括以下內容

還有 安全部署指南,其中提供了部署通用 MySQL 企業版伺服器二進位發行版本與管理 MySQL 安裝安全性的功能的程序。

A.9.2.

MySQL 8.4 中的預設驗證外掛程式是什麼?

從 MySQL 8.0 開始,預設的驗證外掛程式是 caching_sha2_password。有關此外掛程式的資訊,請參閱 第 8.4.1.2 節,「快取 SHA-2 可插拔驗證」

caching_sha2_password 外掛程式提供比已淘汰的 mysql_native_password 外掛程式(MySQL 8.0 之前的 MySQL 版本中的預設外掛程式)更安全的密碼加密。有關此預設外掛程式變更對伺服器運作以及伺服器與用戶端和連接器相容性的影響,請參閱 caching_sha2_password 作為首選驗證外掛程式

有關可插拔驗證和其他可用驗證外掛程式的一般資訊,請參閱 第 8.2.17 節,「可插拔驗證」第 8.4.1 節,「驗證外掛程式」

A.9.3.

MySQL 是否原生支援 SSL?

是,二進位檔支援用戶端和伺服器之間的 SSL 連線。請參閱 第 8.3 節,「使用加密連線」

如果(例如)用戶端應用程式不支援 SSL 連線,您也可以使用 SSH 來隧道連線。如需範例,請參閱 第 8.3.4 節,「使用 SSH 從 Windows 遠端連線至 MySQL」

A.9.4.

SSL 支援是否內建於 MySQL 二進位檔中,還是我必須自己重新編譯二進位檔才能啟用它?

是,二進位檔已為安全、經過驗證或兩者兼具的用戶端/伺服器連線啟用 SSL。請參閱 第 8.3 節,「使用加密連線」

A.9.5.

MySQL 是否內建針對 LDAP 目錄的驗證?

企業版包含一個 PAM 驗證外掛程式,支援針對 LDAP 目錄的驗證。

A.9.6.

MySQL 是否包含基於角色的存取控制 (RBAC) 的支援?

目前沒有。

A.9.7.

MySQL 是否支援 TLS 1.0 和 1.1?

從 MySQL 8.0.28 開始,已移除對 TLSv1 和 TLSv1.1 連線協定的支援。這些協定已從 MySQL 8.0.26 開始淘汰。如需移除的後果,請參閱 移除對 TLSv1 和 TLSv1.1 協定的支援

移除對 TLS 版本 1.0 和 1.1 的支援,因為這些協定版本較舊,分別於 1996 年和 2006 年發布。使用的演算法較弱且過時。

除非您使用的是非常舊版的 MySQL 伺服器或連接器,否則您不太可能使用 TLS 1.0 或 1.1 進行連線。MySQL 連接器和用戶端預設會選取可用的最高 TLS 版本。

何時將 TLS 1.2 的支援新增至 MySQL 伺服器?當社群伺服器在 2019 年為 MySQL 5.6、5.7 和 8.0 切換至 OpenSSL 時,MySQL 社群伺服器新增了 TLS 1.2 的支援。對於 MySQL 企業版,OpenSSL 在 2015 年的 MySQL 伺服器 5.7.10 中新增了 TLS 1.2 的支援。

如何檢視哪些 TLS 版本處於作用中?對於 MySQL 5.7 或 8.0,請執行此查詢來檢查是否正在使用 TLS 1.0 或 1.1

SELECT
  `session_ssl_status`.`thread_id`, `session_ssl_status`.`ssl_version`,
  `session_ssl_status`.`ssl_cipher`, `session_ssl_status`.`ssl_sessions_reused`
FROM `sys`.`session_ssl_status` 
WHERE ssl_version NOT IN ('TLSv1.3','TLSv1.2');

如果列出了使用 TLSv1.0 或 TLSv1.1 的執行緒,您可以執行此查詢來判斷此連線的來源

SELECT thd_id,conn_id, user, db, current_statement, program_name 
FROM sys.processlist
WHERE thd_id IN (
                  SELECT `session_ssl_status`.`thread_id`
                  FROM `sys`.`session_ssl_status` 
                  WHERE ssl_version NOT IN ('TLSv1.3','TLSv1.2')
                );

或者,您可以執行此查詢

SELECT * 
FROM sys.session 
WHERE thd_id IN (
                  SELECT `session_ssl_status`.`thread_id`
                  FROM `sys`.`session_ssl_status` 
                  WHERE ssl_version NOT IN ('TLSv1.3','TLSv1.2')
                );

這些查詢提供了判斷哪個應用程式不支援 TLS 1.2 或 1.3 以及針對這些應用程式進行升級所需的詳細資訊。

是否有其他選項可測試 TLS 1.0 或 1.1?是,您可以在將伺服器升級到較新版本之前停用這些版本。在 mysql.cnf (或 mysql.ini) 中或使用 SET PERSIST 明確指定要使用的版本,例如:--tls-version=TLSv12

所有 MySQL 連接器 (5.7 和 8.0) 是否都支援 TLS 1.2 和更高版本?使用 libmysql 的 C 和 C++ 應用程式呢?對於使用社群 libmysqlclient 程式庫的 C 和 C++ 應用程式,請使用基於 OpenSSL 的程式庫(也就是說,不要使用 YaSSL)。OpenSSL 的使用已在 2018 年統一(分別在 MySQL 8.0.4 和 5.7.28 中)。同樣適用於 Connector/ODBC 和 Connector/C++。若要判斷使用了哪些程式庫相依性,請執行下列命令,以查看是否列出了 OpenSSL。在 Linux 上,請使用此命令

$> sudo ldd usr/local/mysql/lib/libmysqlclient.a | grep -i openssl

在 MacOS 上,請使用此命令

$> sudo otool -l /usr/local/mysql/lib/libmysqlclient.a | grep -i openssl

請檢查每個連接器的文件,但它們都支援 TLS 1.2 和 TLS 1.3。