權限同步是 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 9.0 不支援透過變更 MySQL 權限表格以使用 NDB
儲存引擎,在 NDB Cluster 中的 SQL 節點之間散佈 MySQL 使用者和權限,就像在較舊的版本 (NDB 7.6 和更早版本) 中所做的那樣(請參閱 使用共享授與表格的分散式權限)。