文档首页
MySQL 9.0 参考手册
相关文档 下载此手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  权限同步和 NDB_STORED_USER

25.6.13 权限同步和 NDB_STORED_USER

权限同步是 NDB 集群用于在 SQL 节点之间共享和同步用户、角色和权限的机制。这可以通过授予 NDB_STORED_USER 权限来启用。有关使用方法信息,请参阅该权限的说明。

NDB_STORED_USERSHOW 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 集群一起提供的 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 集群 9.0 不支持通过更改 MySQL 权限表使其使用 NDB 存储引擎(如在较旧版本(NDB 7.6 及更早版本 - 请参阅 使用共享授予表进行分布式权限)中所做的那样)在 NDB 集群中的 SQL 节点之间分发 MySQL 用户和权限。