10bet网址
MySQL 5.6参考手册
相关的文档10bet官方网站 下载本手册
PDF(美国高级主任)- 29.4 mb
PDF (A4)- 29.4 mb
手册页(TGZ)- 190.4 kb
手册页(Zip)- 305.2 kb
信息(Gzip)- 2.8 mb
信息(邮政编码)- 2.8 mb
本手册节选

18.6.16.2 NDB集群和MySQL权限

在本节中,我们将讨论MySQL特权系统是如何与NDB集群相关联的,以及这对保持NDB集群安全的影响。

标准MySQL权限适用于NDB集群表。这包括所有MySQL特权类型(选择特权,更新特权,删除特权,等等)在数据库、表和列级别上授予。与任何其他MySQL服务器一样,用户和特权信息存储在mysql系统数据库。用于授予和撤销权限的SQL语句NDB表、包含此类表的数据库以及此类表中的列在所有方面都与格兰特撤销用于连接涉及任何(其他)MySQL存储引擎的数据库对象的语句。同样的事情也适用于创建用户减少用户语句。

重要的是要记住,默认情况下,MySQL授权表使用MyISAM存储引擎。正因为如此,这些表通常不会在作为NDB集群中的SQL节点的MySQL服务器之间复制或共享。换句话说,默认情况下,用户及其特权的更改不会在SQL节点之间自动传播。如果你愿意,你可以在NDB集群SQL节点上自动分配MySQL用户和权限;看到第18.6.12节,“使用共享授权表的分布式权限”查阅详情。

相反,因为在MySQL中没有办法拒绝特权(特权可以被撤销或不被授予,但不能被拒绝),所以没有特殊的保护NDB一个SQL节点上的表来自拥有另一个SQL节点权限的用户;(即使您没有使用用户权限的自动分配,这也是正确的。最典型的例子就是MySQL帐户,它可以对任何数据库对象执行任何操作。与空结合(mysqld)(api)各部分config.ini文件,这个帐户可能特别危险。要理解其中的原因,请考虑以下场景:

  • config.ini文件至少包含一个空(mysqld)(api)部分。这意味着NDB集群管理服务器不检查MySQL服务器(或其他API节点)访问NDB集群的主机。

  • 没有防火墙,或者防火墙无法阻止网络外部主机访问NDB集群。

  • NDB集群管理服务器的主机名或IP地址已知或可以从网络外确定。

如果这些条件是正确的,那么任何人,在任何地方都可以启动MySQL服务器——ndbcluster——ndb-connectstring =management_host并访问该NDB集群。使用MySQL帐户,这个人可以执行以下操作:

  • 执行元数据语句,例如显示数据库语句(以获取所有NDB服务器上的数据库)或显示来自some_ndb_database语句获取所有的列表NDB

  • 在任何发现的表上运行任何合法的MySQL语句,例如:

    • Select * fromsome_table从任何表中读取所有数据

    • 删除从some_table删除表中的所有数据

    • 描述some_table显示创建表some_table来确定表模式

    • 更新some_tablecolumn1=some_value来填充表列垃圾数据;这实际上可能比简单地删除所有数据造成更大的损害

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

      更新some_tablean_int_column=an_int_column+ 1

      更新some_tablea_varchar_column=反向(a_varchar_column

      这种恶意的言论只会受到攻击者想象力的限制。

    在这种混乱中唯一安全的表是那些使用其他存储引擎创建的表NDB,因此不可见的流氓SQL节点。

    可以以还可以访问INFORMATION_SCHEMA数据库及其表,从而获取关于数据库、表、存储例程、计划事件以及存储元数据的任何其他数据库对象的信息INFORMATION_SCHEMA

    使用不同的密码也是一个很好的主意帐户在不同的NDB集群SQL节点上,除非您使用分布式权限。

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

重要的

请勿将MySQL root帐号密码设置为空.在将MySQL服务器配置为NDB集群中的SQL节点之前,将MySQL作为一个独立的(非集群)MySQL服务器运行也是如此,这应该作为MySQL安装过程的一部分。

如果你希望使用NDB集群的分布式特权功能,你不应该简单地转换系统表mysql数据库来使用NDB手动操作存储引擎。请使用为此目的提供的存储过程;看到第18.6.12节,“使用共享授权表的分布式权限”

否则,如果需要同步mysqlSQL节点之间的系统表,你可以使用标准的MySQL复制来做到这一点,或者使用一个脚本来复制MySQL服务器之间的表项。

总结。关于NDB集群的MySQL特权系统,需要记住的最重要的一点是:

  1. 在一个SQL节点上建立的用户和权限不会自动在集群中的其他SQL节点上存在或生效。相反,删除集群中一个SQL节点上的用户或权限并不会删除其他SQL节点上的用户或权限。

  2. 您可以使用SQL脚本和其中包含的存储过程在SQL节点之间分发MySQL用户和权限,这些存储过程在NDB集群分发中为此目的提供。

  3. 一旦MySQL用户被授予权限NDB在一个NDB集群中的一个SQL节点上的表,该用户可以看到该表中的任何数据,而不管数据来自哪个SQL节点,即使您没有使用特权分布。