21.5.17.2 NDB 群集和 MySQL 特权

在本节中,我们将讨论 MySQL 特权系统相对于 NDB Cluster 的工作方式,以及对保持 NDB Cluster 安全性的意义。

标准 MySQL 特权适用于 NDB 群集 table。这包括在数据库,table 和列级别上授予的所有 MySQL 特权类型(SELECT特权,UPDATE特权,DELETE特权等)。与其他任何 MySQL Server 一样,用户和特权信息存储在mysql系统数据库中。用于授予和撤消NDBtable,包含此类 table 的数据库以及此类 table 中的列的特权的 SQL 语句在所有方面都与用于涉及任何(其他)MySQL 存储引擎的数据库对象的GRANTREVOKE语句相同。关于CREATE USERDROP USER语句,情况也是如此。

请务必记住,默认情况下,MySQL 授权 table 使用MyISAM存储引擎。因此,通常在 NDB 群集中充当 SQL 节点的 MySQL 服务器之间不会复制或共享这些 table。换句话说,默认情况下,用户及其特权的更改不会自动在 SQL 节点之间传播。如果愿意,可以在 NDB Cluster SQL 节点之间启用 MySQL 用户和特权的自动分发;有关详细信息,请参见第 21.5.12 节,“使用共享授予 table 的分布式特权”

相反,由于 MySQL 中没有办法拒绝特权(特权可以首先被吊销或不被授予,但不能以此方式被拒绝),因此对于一个 SQL 节点上的NDBtable,用户没有以下特殊保护:在另一个 SQL 节点上具有特权; (即使您没有使用自动分配用户权限,这也是正确的。它的 Authority 示例是 MySQL root帐户,该帐户可以对任何数据库对象执行任何操作。结合config.ini文件的空[mysqld][api]部分,此帐户可能特别危险。要了解原因,请考虑以下情形:

如果满足这些条件,则任何地方的任何人都可以使用--ndbcluster --ndb-connectstring=management_host启动 MySQL Server 并访问此 NDB 群集。然后,使用 MySQL root帐户,此人可以执行以下操作:

更阴险的变化可能包括以下语句:

UPDATE some_table SET an_int_column = an_int_column + 1

or

UPDATE some_table SET a_varchar_column = REVERSE(a_varchar_column)

此类恶意声明仅受攻击者的想象力限制。

避免此类混乱的唯一安全 table 是那些使用除NDB之外的存储引擎创建的 table,因此对于“流氓” SQL 节点不可见。

root身份登录的用户还可以访问INFORMATION_SCHEMA数据库及其 table,从而获取有关数据库,table,存储的例程,计划的事件以及元数据存储在INFORMATION_SCHEMA中的任何其他数据库对象的信息。

除非您使用分布式特权,否则对不同的 NDB Cluster SQL 节点上的root帐户使用不同的密码也是一个很好的主意。

总而言之,如果可以从本地网络外部直接访问 NDB 群集,则不能拥有一个安全的 NDB 群集。

Important

请勿将 MySQL 根帐户密码留空。在将 MySQL 作为 NDB 群集 SQL 节点运行时,这与作为独立(非集群)MySQL 服务器运行它时一样,并且在将 MySQL Server 配置为 SQL 之前,应作为 MySQL 安装过程的一部分来完成。 NDB 群集中的节点。

如果希望使用 NDB Cluster 的分布式特权功能,则不应简单地将mysql数据库中的系统 table 转换为手动使用NDB存储引擎。为此,请使用提供的存储过程。参见第 21.5.12 节,“使用共享授予 table 的分布式特权”

否则,如果需要在 SQL 节点之间同步mysql系统 table,则可以使用标准的 MySQL 复制来进行同步,或者使用脚本在 MySQL 服务器之间复制 table 条目。

摘要. 有关 NDB 群集的 MySQL 特权系统,需要记住的最重要要点如下:

首页