Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

25.6.13 权限同步和 NDB_STORED_USER

权限同步是 NDB 集群用于共享和同步用户、角色和权限之间的机制。这可以通过授予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',通过将查询SHOW CREATE USER cluster_app_user@localhostSHOW GRANTS FOR cluster_app_user@localhost传递给NDB以创建快照,然后将结果存储在ndb_sql_metadata中。然后,其他SQL节点被请求读取和应用快照。每当MySQL服务器启动并加入集群作为SQL节点时,它将执行这些存储的CREATE USERGRANT语句作为集群架构同步过程的一部分。

在SQL节点上执行的每个SQL语句,如果不是原始语句所在的节点,则将在NDBCLUSTER存储引擎中的utility线程中运行;这是在MySQL复制副本应用程序线程的安全环境中进行的。

SQL节点执行用户特权更改操作时,会先获取全局锁,以防止死锁由不同SQL节点上的并发ACL操作引起。

请注意,因为共享架构更改操作是同步进行的,因此在对任何共享用户或用户进行更改后,下一个共享架构更改将作为同步点。任何挂起的用户更改都将完成运行,然后才能开始架构更改分布;接着架构更改本身将同步运行。例如,如果在对分布式用户执行DROP USER语句后,紧跟着一个DROP DATABASE语句,那么数据库的删除操作将不能在所有SQL节点上完成用户删除操作之前。

如果来自多个SQL节点的GRANTREVOKE或其他用户管理语句导致某个用户在不同SQL节点上的权限分歧,你可以通过在一个SQL节点上为该用户执行GRANT NDB_STORED_USER语句来解决这个问题,这将导致新的权限快照被创建并同步到其他SQL节点。

Note

NDB集群8.4不支持通过更改MySQL权限表,以便在NDB集群中的SQL节点之间分布MySQL用户和权限(与早期版本NDB 7.6及之前的做法不同—见使用共享授权表分布权限)。