Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Privilege Synchronization and NDB_STORED_USER

25.6.13 权限同步和 NDB_STORED_USER

权限同步是 NDB 集群用于在 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 集群随附的 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 节点在执行更改之前将获取全局锁,以防止并发 ACL 操作在不同 SQL 节点上的死锁。

请注意,因为共享模式更改操作是同步执行的,因此在更改任何共享用户或用户后,下一个共享模式更改将作为同步点。任何挂起的用户更改将在 schema 更改分布之前完成;然后 schema 更改本身将同步运行。例如,如果 DROP DATABASE 语句跟随分布式用户的 DROP USER,则不能删除数据库,直到删除用户在所有 SQL 节点上完成。

如果多个 GRANTREVOKE 或其他用户管理语句来自多个 SQL 节点,导致某个用户的权限在不同 SQL 节点上发散,可以通过在某个 SQL 节点上授予该用户的 GRANT NDB_STORED_USER 权限来修复该问题;这将导致新的权限快照被拍摄并同步到其他 SQL 节点。

Note

NDB 集群 8.3 不支持在 NDB 集群中跨 SQL 节点分布 MySQL 用户和权限的方式是通过将 MySQL 权限表更改为使用 NDB 存储引擎,如旧版本(NDB 7.6 及更早版本)所做的那样(请参阅 分布式权限使用共享授权表)。