權限同步是 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@localhost
和 SHOW GRANTS FOR cluster_app_user@localhost
建立快照,然後將結果儲存在 ndb_sql_metadata
中。接著會要求任何其他 SQL 節點讀取並套用快照。每當 MySQL 伺服器啟動並以 SQL 節點加入叢集時,它會執行這些儲存的 CREATE USER
和 GRANT
陳述式,作為叢集結構描述同步程序的一部分。
每當在不是它來源的 SQL 節點上執行 SQL 陳述式時,該陳述式會在 NDBCLUSTER
儲存引擎的公用程式執行緒中執行;這是在相當於 MySQL 複製複本應用程式執行緒的安全環境中完成的。
對使用者權限執行變更的 SQL 節點會先取得全域鎖定,然後再執行變更,以防止不同 SQL 節點上同時進行 ACL 作業而發生死鎖。
您應該記住,由於共享結構描述變更作業是同步執行的,因此在變更任何共享使用者或使用者之後,下一個共享結構描述變更會作為同步點。任何擱置中的使用者變更都會執行至完成,然後才能開始結構描述變更散發;在此之後,結構描述變更本身會同步執行。例如,如果 DROP DATABASE
陳述式跟在散佈式使用者的 DROP USER
之後,則必須先在所有 SQL 節點上完成使用者刪除,才能執行資料庫刪除。
如果多個 SQL 節點的多個 GRANT
、REVOKE
或其他使用者管理陳述式導致指定使用者的權限在不同的 SQL 節點上有所不同,您可以透過在已知權限正確的 SQL 節點上為此使用者發出 GRANT NDB_STORED_USER
來解決此問題;這會導致擷取新的權限快照並同步到其他 SQL 節點。
NDB Cluster 8.4 不支援透過變更 MySQL 權限表格使其使用 NDB
儲存引擎來散佈 NDB Cluster 中 SQL 節點上的 MySQL 使用者和權限,如同在較舊的版本(NDB 7.6 和更早版本—請參閱 使用共享授權表格散佈權限)中所做的那樣。