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_select_all, предоставляемую с NDB Cluster, следующим образом (некоторые строки вывода были переносятся для сохранения форматирования):
$> 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, выполняющий изменение привилегий пользователя, берет глобальную блокировку перед этим, что предотвращает тупики при одновременных операциях ACL на разных узлах SQL.
Следует учитывать, что из-за синхронного выполнения операций изменения общей схемы следующее изменение общей схемы, следующее за изменением любого общего пользователя или пользователей, служит точкой синхронизации. Любые ожидающие изменения пользователей выполняются до начала распределения изменений схемы; после этого само изменение схемы выполняется синхронно. Например, если оператор DROP DATABASE следует за оператором DROP USER распределенного пользователя, удаление базы данных не может произойти до тех пор, пока удаление пользователя не будет завершено на всех узлах SQL.
В случае, если несколько GRANT, REVOKE или других операторов администрирования пользователей с нескольких узлов SQL приводят к расхождению привилегий для данного пользователя на разных узлах SQL, вы можете исправить эту проблему, выдав GRANT NDB_STORED_USER для этого пользователя на узле SQL, где привилегии известны как правильные; это приведет к созданию нового моментального снимка привилегий и его синхронизации с другими узлами SQL.
NDB Cluster 8.4 не поддерживает распределение пользователей MySQL и привилегий по узлам SQL в кластере NDB путем изменения таблиц привилегий MySQL таким образом, чтобы они использовали движок хранения NDB, как это делалось в более ранних выпусках (NDB 7.6 и ранее — см.).
© 2025 Oracle
Licensed under the GPLv2 License.