的加载数据
语句将数据文件加载到表中。语句可以加载位于服务器主机上的文件,或者,如果当地的
关键字,在客户端主机上指定。
的当地的
版本的加载数据
有两个潜在的安全问题:
因为
本地加载数据
是一条SQL语句,解析发生在服务器端,文件从客户端主机到服务器主机的传输是由MySQL服务器发起的,它告诉客户端语句中命名的文件。理论上,打过补丁的服务器可以告诉客户端程序传输服务器选择的文件,而不是语句中指定的文件。这样的服务器可以访问客户端用户具有读访问权的客户端主机上的任何文件。(打过补丁的服务器实际上可以用文件传输请求回复任何语句,而不仅仅是本地加载数据
因此,一个更根本的问题是,客户端不应该连接到不受信任的服务器。)在客户机从Web服务器连接的Web环境中,用户可以使用
本地加载数据
读取Web服务器进程具有读访问权的任何文件(假设用户可以对SQL服务器运行任何语句)。在这种环境中,相对于MySQL服务器的客户机实际上是Web服务器,而不是由连接到Web服务器的用户运行的远程程序。
为避免连接到不受信任的服务器,客户端可以建立一个安全连接,并通过使用——ssl-mode = VERIFY_IDENTITY
选项和适当的CA证书。
为了避免加载数据
问题,客户应避免使用当地的
.
管理员和应用程序可以通过以下方式配置是否允许本地数据加载:
在服务器端:
的
local_infile
系统变量控制服务器端当地的
能力。取决于local_infile
设置时,服务器拒绝或允许请求本地数据加载的客户机加载本地数据。默认情况下,
local_infile
启用。使服务器拒绝或允许本地加载数据
语句显式地(无论在构建时或运行时如何配置客户机程序和库)开始mysqld与local_infile
禁用或启用。local_infile
也可以在运行时设置。
在客户端:
的
ENABLED_LOCAL_INFILE
CMake选项控制编译后的默认值当地的
MySQL客户端库的功能(参见第2.9.7节“MySQL源配置选项”).因此,没有做出明确安排的客户就有了当地的
功能已禁用或已启用ENABLED_LOCAL_INFILE
设置在MySQL构建时指定。默认情况下,MySQL二进制发行版中的客户端库是用
ENABLED_LOCAL_INFILE
启用。如果从源代码编译MySQL,则配置为ENABLED_LOCAL_INFILE
根据没有明确安排的客户端是否应该启用或禁用当地的
功能已禁用或已启用。对于使用C API的客户端程序,本地数据加载能力由编译到MySQL客户端库中的默认值决定。要显式启用或禁用它,请调用
mysql_options ()
C API函数来禁用或启用MYSQL_OPT_LOCAL_INFILE
选择。看到mysql_options ().为mysql客户端,本地数据加载能力是由MySQL默认编译成的客户端库决定的。要显式禁用或启用它,请使用
——local-infile = 0
或——local-infile (= 1)
选择。为mysqlimport客户端,默认情况下不使用本地数据加载。要显式禁用或启用它,请使用
——当地= 0
或——当地(= 1)
选择。如果你使用
本地加载数据
在Perl脚本或其他程序中(客户端)
组从选项文件,您可以添加local-infile
该组的选项设置。为防止不理解此选项的程序出现问题,请使用宽松的,
前缀:[客户]loose-local-infile = 0
或者:
[客户]loose-local-infile = 1
在所有情况下,成功使用a
当地的
客户机的加载操作还要求服务器允许本地加载。
如果当地的
在服务器端或客户端上,试图发出本地加载数据
语句收到以下错误消息:
错误1148:使用的命令在这个MySQL版本中不被允许
MySQL Shell提供了许多实用程序来转储表、模式或服务器实例,并将它们加载到其他实例中。当您使用这些实用程序来处理数据时,MySQL Shell提供了额外的功能,如输入预处理、多线程并行加载、文件压缩和解压,以及处理对Oracle云基础设施对象存储桶的访问。为了获得最好的功能,总是使用MySQL Shell的转储和转储加载实用程序的最新版本。
MySQL Shell的数据上传实用程序的使用加载数据本地文件
语句来上传数据,因此local_infile
系统变量必须设置为在
在目标服务器实例上。您可以在上传数据之前执行此操作,并在之后再次删除它。这些实用程序安全地处理文件传输请求,以处理本主题中讨论的安全考虑因素。
MySQL Shell包括这些转储和转储加载工具:
-
表导出实用程序
util.exportTable ()
-
将MySQL关系表导出到一个数据文件中,该文件可以使用MySQL Shell的并行表导入实用程序上传到MySQL服务器实例,导入到不同的应用程序,或用作逻辑备份。该实用程序具有预设选项和定制选项,可生成不同的输出格式。
-
并行表导入实用程序
util.importTable ()
-
将数据文件导入MySQL关系表。数据文件可以是MySQL Shell表导出工具的输出,也可以是该工具的预设和定制选项支持的其他格式。该实用程序可以在将数据添加到表之前执行输入预处理。它可以接受多个数据文件合并到一个关系表中,并自动解压压缩文件。
-
实例转储实用程序
util.dumpInstance ()
,模式转储实用程序util.dumpSchemas ()
和表转储实用程序util.dumpTables ()
-
将实例、模式或表导出到一组转储文件中,然后可以使用MySQL Shell的转储加载实用程序将这些文件上传到MySQL实例中。这些实用工具提供了Oracle Cloud Infrastructure对象存储流、MySQL数据库服务兼容性检查和修改,以及在处理转储之前进行演练以识别问题的能力。
-
转储加载实用程序
util.loadDump ()
-
导入使用MySQL Shell的实例、模式或表转储实用程序创建的转储文件到MySQL数据库服务DB系统或MySQL服务器实例。该实用工具管理上传过程,并提供来自远程存储的数据流、表或表块的并行加载、进度状态跟踪、恢复和重置功能,以及在转储仍在进行时的并发加载选项。MySQL Shell的并行表导入实用程序可以与转储加载实用程序结合使用,在将数据上传到目标MySQL实例之前修改数据。
有关实用程序的详细信息,请参见MySQL Shell实用程序.