文件首頁
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_STORED_USER

25.6.13 權限同步和 NDB_STORED_USER

權限同步是 NDB Cluster 用於在 SQL 節點之間共享和同步使用者、角色和權限的機制。這可以透過授予 NDB_STORED_USER 權限來啟用。請參閱權限說明以取得使用資訊。

如同其他任何權限一樣,NDB_STORED_USER 會印在 SHOW GRANTS 的輸出中,如下所示

mysql> SHOW GRANTS for 'jon'@'localhost';
+---------------------------------------------------+
| Grants for jon@localhost                          |
+---------------------------------------------------+
| GRANT USAGE ON *.* TO `jon`@`localhost`           |
| GRANT NDB_STORED_USER ON *.* TO `jon`@`localhost` |
+---------------------------------------------------+

您也可以使用 NDB Cluster 隨附的 ndb_select_all 公用程式來驗證此帳戶的權限是否已共享,如下所示(部分輸出已換行以保留格式)

$> ndb_select_all -d mysql ndb_sql_metadata | grep '`jon`@`localhost`'
12      "'jon'@'localhost'"     0       [NULL]  "GRANT USAGE ON *.* TO `jon`@`localhost`"
11      "'jon'@'localhost'"     0       2       "CREATE USER `jon`@`localhost`
IDENTIFIED WITH 'caching_sha2_password' AS
0x2441243030352466014340225A107D590E6E653B5D587922306102716D752E6656772F3038512F
6C5072776D30376D37347A384B557A4C564F70495158656A31382E45324E33
REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK PASSWORD HISTORY DEFAULT
PASSWORD REUSE INTERVAL DEFAULT PASSWORD REQUIRE CURRENT DEFAULT"
12      "'jon'@'localhost'"     1       [NULL]  "GRANT NDB_STORED_USER ON *.* TO `jon`@`localhost`"

ndb_sql_metadata 是一個特殊的 NDB 表格,使用 mysql 或其他 MySQL 用戶端無法看見。

授予 NDB_STORED_USER 權限的陳述式,例如 GRANT NDB_STORED_USER ON *.* TO 'cluster_app_user'@'localhost',其運作方式是透過指示 NDB 使用查詢 SHOW CREATE USER cluster_app_user@localhostSHOW GRANTS FOR cluster_app_user@localhost 建立快照,然後將結果儲存在 ndb_sql_metadata 中。接著會要求任何其他 SQL 節點讀取並套用快照。每當 MySQL 伺服器啟動並以 SQL 節點加入叢集時,它會執行這些儲存的 CREATE USERGRANT 陳述式,作為叢集結構描述同步程序的一部分。

每當在不是它來源的 SQL 節點上執行 SQL 陳述式時,該陳述式會在 NDBCLUSTER 儲存引擎的公用程式執行緒中執行;這是在相當於 MySQL 複製複本應用程式執行緒的安全環境中完成的。

對使用者權限執行變更的 SQL 節點會先取得全域鎖定,然後再執行變更,以防止不同 SQL 節點上同時進行 ACL 作業而發生死鎖。

您應該記住,由於共享結構描述變更作業是同步執行的,因此在變更任何共享使用者或使用者之後,下一個共享結構描述變更會作為同步點。任何擱置中的使用者變更都會執行至完成,然後才能開始結構描述變更散發;在此之後,結構描述變更本身會同步執行。例如,如果 DROP DATABASE 陳述式跟在散佈式使用者的 DROP USER 之後,則必須先在所有 SQL 節點上完成使用者刪除,才能執行資料庫刪除。

如果多個 SQL 節點的多個 GRANTREVOKE 或其他使用者管理陳述式導致指定使用者的權限在不同的 SQL 節點上有所不同,您可以透過在已知權限正確的 SQL 節點上為此使用者發出 GRANT NDB_STORED_USER 來解決此問題;這會導致擷取新的權限快照並同步到其他 SQL 節點。

注意

NDB Cluster 8.4 不支援透過變更 MySQL 權限表格使其使用 NDB 儲存引擎來散佈 NDB Cluster 中 SQL 節點上的 MySQL 使用者和權限,如同在較舊的版本(NDB 7.6 和更早版本—請參閱 使用共享授權表格散佈權限)中所做的那樣。