文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 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 參考手冊  /  ...  /  NDB Cluster 與 MySQL 權限

25.6.21.2 NDB Cluster 與 MySQL 權限

在本節中,我們將討論 MySQL 權限系統如何與 NDB Cluster 配合運作,以及這對保持 NDB Cluster 安全的影響。

標準 MySQL 權限適用於 NDB Cluster 表格。這包括在資料庫、表格和欄位層級上授予的所有 MySQL 權限類型(SELECT 權限、UPDATE 權限、DELETE 權限等等)。與任何其他 MySQL 伺服器一樣,使用者和權限資訊儲存在 mysql 系統資料庫中。用於授予和撤銷 NDB 表格、包含此類表格的資料庫,以及此類表格中欄位的權限的 SQL 陳述式,在所有方面都與連線到涉及任何(其他)MySQL 儲存引擎的資料庫物件所使用的 GRANTREVOKE 陳述式相同。對於 CREATE USERDROP USER 陳述式也是如此。

請務必記住,根據預設,MySQL 授權表使用 InnoDB 儲存引擎。因此,這些表格通常不會在 NDB Cluster 中作為 SQL 節點的 MySQL 伺服器之間複製或共用。換句話說,根據預設,使用者及其權限的變更不會在 SQL 節點之間自動傳播。如果您願意,可以啟用 NDB Cluster SQL 節點之間 MySQL 使用者和權限的同步;如需詳細資訊,請參閱第 25.6.13 節,〈權限同步和 NDB_STORED_USER〉

相反地,由於 MySQL 中沒有拒絕權限的方式(權限可以撤銷或一開始未授予,但不能以這種方式拒絕),因此,即使您未使用自動分發使用者權限,也無法特別保護某個 SQL 節點上的 NDB 表格免受另一個 SQL 節點上具有權限的使用者侵害;即使您未使用自動分發使用者權限,情況也是如此。此情況的明確範例是 MySQL root 帳戶,該帳戶可以對任何資料庫物件執行任何動作。在 config.ini 檔案的空白 [mysqld][api] 區段的情況下,此帳戶可能會特別危險。要了解原因,請考慮以下情境

  • config.ini 檔案至少包含一個空白的 [mysqld][api] 區段。這表示 NDB Cluster 管理伺服器不會檢查 MySQL 伺服器(或其他 API 節點)從哪個主機存取 NDB Cluster。

  • 沒有防火牆,或防火牆無法防止從網路外部的主機存取 NDB Cluster。

  • NDB Cluster 管理伺服器的主機名稱或 IP 位址是已知的,或可以從網路外部判斷。

如果這些條件為真,則任何人都可以從任何地方啟動 MySQL 伺服器,並使用 --ndbcluster --ndb-connectstring=management_host 存取此 NDB Cluster。使用 MySQL root 帳戶,此人接著可以執行下列動作

  • 執行中繼資料陳述式,例如 SHOW DATABASES 陳述式(以取得伺服器上所有 NDB 資料庫的清單)或 SHOW TABLES FROM some_ndb_database 陳述式,以取得給定資料庫中所有 NDB 表格的清單

  • 對任何探索到的表格執行任何合法的 MySQL 陳述式,例如

    • SELECT * FROM some_tableTABLE some_table 從任何表格讀取所有資料

    • DELETE FROM some_table 或 TRUNCATE TABLE 刪除表格中的所有資料

    • DESCRIBE some_tableSHOW CREATE TABLE some_table 判斷表格結構描述

    • UPDATE some_table SET column1 = some_value 以「垃圾」資料填滿表格欄位;這實際上可能造成比單純刪除所有資料更大的損害

      更陰險的變體可能包括以下陳述式

      UPDATE some_table SET an_int_column = an_int_column + 1

      UPDATE some_table SET a_varchar_column = REVERSE(a_varchar_column)

      此類惡意陳述式僅受攻擊者想像力的限制。

    唯一能免於此類破壞的表格,是使用 NDB 以外的儲存引擎所建立的表格,因此「惡意」SQL 節點看不到。

    可以使用 root 身分登入的使用者也可以存取 INFORMATION_SCHEMA 資料庫及其表格,從而取得關於資料庫、表格、已儲存常式、排程事件,以及任何其他在 INFORMATION_SCHEMA 中儲存中繼資料的資料庫物件的資訊。

    除非您使用共用權限,否則最好為不同 NDB Cluster SQL 節點上的 root 帳戶使用不同的密碼。

總之,如果 NDB Cluster 可以直接從您的本機網路外部存取,則無法確保其安全。

重要

切勿將 MySQL root 帳戶密碼留空。當執行 MySQL 作為 NDB Cluster SQL 節點時,情況與將其作為獨立 (非叢集) MySQL 伺服器執行時一樣,且應在設定 MySQL 伺服器作為 NDB Cluster 中的 SQL 節點之前,作為 MySQL 安裝程序的一部分進行。

如果您需要在 SQL 節點之間同步 mysql 系統表格,可以使用標準 MySQL 複製來執行此作業,或使用指令碼在 MySQL 伺服器之間複製表格項目。使用者及其權限可以使用 NDB_STORED_USER 權限進行共用和保持同步。

摘要。  關於 NDB Cluster 的 MySQL 權限系統,以下列出最重要且應記住的重點

  1. 在一個 SQL 節點上建立的使用者和權限不會自動存在,也不會在叢集中的其他 SQL 節點上生效。相反地,在叢集中的一個 SQL 節點上移除使用者或權限,不會從任何其他 SQL 節點移除使用者或權限。

  2. 您可以使用 NDB_STORED_USER 在 SQL 節點之間共用 MySQL 使用者和權限。

  3. 一旦從 NDB Cluster 中的某個 SQL 節點授予 MySQL 使用者在 NDB 表格上的權限,該使用者可以「看到」表格中的任何資料,無論資料來自哪個 SQL 節點,即使該使用者未共用也一樣。