Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL如何使用UNC路径格式的'Load_file()`函数?_Mysql - Fatal编程技术网

MySQL如何使用UNC路径格式的'Load_file()`函数?

MySQL如何使用UNC路径格式的'Load_file()`函数?,mysql,Mysql,我知道我需要使用文档中提到的特定路径名 要使用此功能,文件必须位于服务器主机上 工作路径: 此处的路径在使用函数load_file()时,当前保存为MySQL数据库中的blob附件 insert into document_control (fileattachment) values (load_file('C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\test.docx')) 非工作路径 此路径不起作用-即使它与PC上的MySQL服务器文件夹

我知道我需要使用文档中提到的特定路径名

要使用此功能,文件必须位于服务器主机上

工作路径:

此处的路径在使用函数
load_file()
时,当前保存为MySQL数据库中的blob附件

insert into document_control (fileattachment) values (load_file('C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\test.docx'))
非工作路径

此路径不起作用-即使它与PC上的MySQL服务器文件夹位于同一主机上。该值显示为
Null

insert into document_control (fileattachment) values (load_file('\\winx-pc04\c$\ProgramData\MySQL\MySQL Server 8.0\Uploads\test.docx'));
问题

为什么它不将文件附加为
BLOB
?而它仍然是正确的服务器主机路径


我怎样才能让它工作呢?

假设您正在使用一种应用程序语言,比如PHP,让它加载图像。然后,我建议您获取图像的十六进制数,并在sql中取消其表达式:

INSERT INTO ... (..., image_blob, ...)
         VALUES ( ..., UNHEX(?), ...)

如果映像超过500KB,您可能需要增加一个设置,因为单个SQL语句将超过1MB。

从我在Windows上的简要观察中可以看出,MySQL最终会调用,而唯一阻碍您打开UNC路径的是该设置:

此变量用于限制数据导入和导出操作的效果,例如加载数据和选择。。。转换为OUTFILE语句和LOAD_FILE()函数。这些操作仅允许具有文件权限的用户进行

secure_file_priv可设置如下:

  • 如果为空,则变量无效。这不是一个安全的设置

  • 如果设置为目录名,则服务器将导入和导出操作限制为仅处理该目录中的文件。目录必须存在;服务器将不会创建它

  • 如果设置为NULL,服务器将禁用导入和导出操作

服务器在启动时检查secure_file_priv的值,如果该值不安全,则向错误日志写入警告。如果非NULL值为空,或者该值是数据目录或其子目录,或者是所有用户都可以访问的目录,则认为该值不安全。如果将secure_file_priv设置为不存在的路径,则服务器会将错误消息写入错误日志并退出

我假设您运行Windows,并使用其一体式msi安装程序安装了MySQL。在这种情况下,
secure\u file\u priv
可能是为您预先配置的 类似于
C:\ProgramData\MySQL\MySQL Server 8.0\Uploads
。即使它是相同的路径,也会使用字符串值,因此您的UNC路径仍将无法通过检查

显示变量,如“%secure\u file\u priv%”
不幸的是,此设置无法动态更新,因此您需要通过配置将其设置为空字符串,然后重新启动服务器-然后它应该可以工作。但是,请注意,为了正确转义路径,您可能必须将斜杠加倍:

插入文档控制(文件附件)值(加载文件('\\\winx-pc04\\c$\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\test.docx');
我还没有对它进行测试,但是您可以将
secure\u file\u priv
设置为您的UNC路径,以便服务器不会抛出任何安全警告

无论如何,下面是我在MySQL工作台中工作查询的一个示例(这可能会有帮助)

您的非工作路径位于中,用于访问网络资源,因此违反了MySQL规则,即文件必须位于服务器上host@Jamie_D我可以将服务器主机路径更改为任意吗?您应该能够加载
C:\path\to\the\file
格式的任意文件。。应该禁用吗?基本上,您的脚本必须具有尝试加载的访问权限。多年未使用Windows系统,如果其他人向您演示如何设置,可能会更好…;)您好,谢谢您的回答,但我一直没有理解PHP。Python可能是我最好的选择。我在玩我的服务器时做了另一件事——我将Windows服务改为在我的用户帐户下运行,而不是
NETWORK\u服务
——我试图消除帐户权限级别的差异。也许就是这样?作为实验,也许还可以尝试将您的文件夹从程序数据中移出(这是一个有点特殊的情况,不是吗),并允许对
所有人
进行完全访问到新位置。还想知道您是否正在使用mysql workbench对其进行测试-我想知道它是否有一些额外的逻辑使其适合我。。。