JawsDB中secure_file_priv值/secure_file_priv_dir/使用及LOAD_FILE配置问题
JawsDB
secure_file_priv 运行机制与LOAD_FILE操作配置方案 secure_file_priv 基础作用
secure_file_priv 是MySQL原生的系统安全变量,用于限制LOAD_FILE()、LOAD DATA、SELECT ... INTO OUTFILE等涉及文件读写的SQL操作的允许路径,取值规则如下:
- 空值:不做路径限制,所有文件路径都允许操作(生产环境存在极高安全风险,默认不会开启)
- 具体目录路径:仅允许在指定目录下执行文件操作
NULL:完全禁用所有文件读写类SQL操作
/secure_file_priv_dir/ 运行机制
JawsDB作为多租户托管MySQL服务,为了隔离不同租户的文件访问权限,会为每个独立实例分配专属的/secure_file_priv_dir/映射目录,运行逻辑如下:
- 该目录是JawsDB服务端虚拟生成的隔离路径,和用户本地的文件系统完全不互通,本地Windows环境的路径规则对该目录不生效
- 仅当前绑定的MySQL实例进程有权限读写该目录,其他租户、外部进程均无法访问
- 所有文件操作的路径必须严格以
/secure_file_priv_dir/为前缀,相对路径、其他绝对路径都会被系统拦截
正常执行LOAD_FILE的配置方法
- 首先开通
FILE权限:JawsDB默认不会给普通数据库用户开放FILE权限,你需要在JawsDB实例管理后台提交权限申请,开通FILE权限后才能执行文件读写类操作 - 上传目标文件到指定目录:你需要通过JawsDB实例后台的专属文件上传入口,把需要读取的文件上传到
/secure_file_priv_dir/目录下,不支持通过FTP、MySQL客户端等其他渠道自行上传文件 - 调整SQL语法:执行
LOAD_FILE时必须填写完整的服务端绝对路径,比如你上传了名为user_data.txt的文件,正确写法为SELECT LOAD_FILE('/secure_file_priv_dir/user_data.txt');,注意该路径大小写敏感 - 异常排查:如果返回结果为
NULL,可先检查文件大小是否超出max_allowed_packet变量限制,以及上传的文件是否配置了可读权限
内容的提问来源于stack exchange,提问作者sloth740
相关产品推荐
相关产品推荐

