LOAD DATA LOCAL的安全问题
LOAD DATA语句将数据文件加载到表中。这语句可以加载位于服务器主机上的文件,如果指定了LOCAL关键字,则可以加载客户端主机上的文件。
LOCAL版本的 LOAD DATA有两个潜在的安全问题:
1、由于LOAD DATA LOCAL是一个SQL语句,解析发生在服务器端,文件从客户机主机到服务器主机的传输由MySQL服务器启动,MySQL服务器告诉客户机语句中命名的文件。理论上,修补过的服务器可以告诉客户端程序传输服务器选择的文件,而不是语句中指定的文件。这样的服务器可以访问客户机上用户具有读取权限的任何文件。(事实上,已修补的服务器可以用文件传输请求回复任何语句,而不仅仅是本地加载数据,因此更根本的问题是客户端不应连接到不受信任的服务器。)
2、在Web环境中,用户可以使用LOAD DATA LOCAL来读取Web服务器进程具有读取权限的任何文件(假设用户可以对SQL服务器运行任何语句)。在这个环境中,MySQL服务器的客户端实际上是Web服务器,而不是连接到Web服务器的用户运行的远程程序。
为了避免连接到不受信任的服务器,客户端可以建立安全连接,并通过使用--ssl mode=verify_identity选项和适当的CA证书进行连接来验证服务器标识。
为避免加载数据问题,除非采取了适当的客户端预防措施,否则客户端应避免使用LOCAL。
为了控制本地数据加载,MySQL允许启用或禁用该功能。此外,从MySQL 8.0.21开始,MySQL允许客户端将本地数据加载操作限制在指定目录中的文件中。
为了使管理员和应用程序能够管理本地数据加载功能,LOCAL配置工作如下:
在服务器端