LOAD DATA LOCAL安全问题及解决方法

 时间:2026-02-12 00:06:01

LOAD DATA语句可以装载服务器主机上的文件,若指定LOCAL关键字,可以装载客户端文件。

支持LOCAL版本的LOAD DATA语句有两个可能的安全问题:

    由MySQL服务器启动文件从客户端向服务器主机的传输。理论上,打过补丁的服务器可以告诉客户端程序传输服务器选择的文件,而不是客户用LOAD  DATA语句指定的文件。这样服务器可以访问客户端上客户有读访问权限的任何文件。

    在Web环境中,客户从Web服务器连接,用户可以使用LOAD  DATA  LOCAL来读取Web服务器进程有读访问权限的任何文件(假定用户可以运行SQL服务器的任何命令)。在这种环境中,MySQL服务器的客户实际上是Web服务器,而不是连接Web服务器的用户运行的程序。

要处理这些问题,我们更改了MySQL 3.23.49和MySQL  4.0.2(Windows中的4.0.13)中的LOAD DATA  LOCAL的处理方法:

     默认情况下,现在所有二进制分中的发MySQL客户端和库是用--enable-local-infile选项编译,以便与MySQL  3.23.48和以前的版本兼容。

    如果你从源码构建MySQL但没有使用--enable-local-infile选项来进行configure,则客户不能使用LOAD  DATA LOCAL,除非显式调用mysql_options  (...MYSQL_OPT_本地_INFILE,0)。

    你可以用--local-infile=0选项启动mysqld从服务器端禁用所有LOAD  DATA LOCAL命令。

    对于mysql命令行客户端,可以通过指定--local-infile[=1]选项启用LOAD  DATA  LOCAL,或通过--local-infile=0选项禁用。类似地,对于mysqlimport,--local  or -L选项启用本地数据文件装载。在任何情况下,成功进行本地装载需要服务器启用相关选项。

    如果你使用LOAD DATA LOCAL  Perl脚本或其它读选项文件中的[client]组的程序,你可以在组内添加local-infile=1选项。但是,为了便面不理解local-infile的程序产生问题,则规定使用loose-  prefix:

    ·                [client]

    ·                loose-local-infile=1

      如果LOAD DATA LOCAL  INFILE在服务器或客户端被禁用,试图执行该语句的客户端将收到下面的错误消息:

    ERROR 1148: The used command is not allowed with this MySQL version

  • MySql access denied for user错误
  • Mysql Oracle DM数据库统计表数据量和条数
  • 在js中如何获取textarea有多少行
  • 如何使用jquery修改div里的文字内容?
  • 如何使用SQL Developer为表新建唯一约束条件
  • 热门搜索
    四川省旅游政务网 大理古城旅游攻略 连云港旅游政务网 中国式旅游 昆明旅游线路 去韩国旅游签证怎么办 邮轮旅游攻略 杭州旅游景点介绍 新西兰旅游费用 澳新旅游