的加载数据
语句将数据文件加载到表中。语句可以加载位于服务器主机上的文件,或者,如果当地的
关键字,在客户端主机上指定。
的当地的
版本的加载数据
有两个潜在的安全问题:
因为
数据加载本地
是一条SQL语句,解析发生在服务器端,文件从客户端主机到服务器主机的传输是由MySQL服务器发起的,它告诉客户端语句中命名的文件。理论上,打过补丁的服务器可以告诉客户端程序传输服务器选择的文件,而不是语句中指定的文件。这样的服务器可以访问客户端用户具有读访问权的客户端主机上的任何文件。(打过补丁的服务器实际上可以用文件传输请求回复任何语句,而不仅仅是数据加载本地
因此,一个更根本的问题是,客户端不应该连接到不受信任的服务器。)在客户机从Web服务器连接的Web环境中,用户可以使用
数据加载本地
读取Web服务器进程具有读访问权的任何文件(假设用户可以对SQL服务器运行任何语句)。在这种环境中,相对于MySQL服务器的客户机实际上是Web服务器,而不是由连接到Web服务器的用户运行的远程程序。
为避免连接到不受信任的服务器,客户端可以建立一个安全连接,并通过使用——ssl-verify-server-cert
选项和适当的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版本中不被允许