相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

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

A.9.1. 我可以在哪裡找到說明 MySQL 安全性問題的文件?
A.9.2. MySQL 9.0 中的預設驗證外掛程式是什麼?
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 9.0 中的預設驗證外掛程式是什麼?

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

caching_sha2_password 外掛程式提供的密碼加密比已棄用的 mysql_native_password 外掛程式 (MySQL 8.0 之前版本中的預設外掛程式) 更安全。有關此預設外掛程式變更對伺服器操作以及伺服器與用戶端和連接器相容性的影響的資訊,請參閱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 版本。

何時在 MySQL 伺服器中新增 TLS 1.2 的支援?當社群伺服器在 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。