关于mysql:MySQL-全局配置-securefilepriv

53次阅读

共计 1750 个字符,预计需要花费 5 分钟才能阅读完成。

MySQL 全局配置 --secure-file-priv

一则问题

在执行导出 INFORMATION_SCHEMA.OPTIMIZER_TRACE 内容到本地文件时:

SELECT TRACE INTO DUMPFILE "optimizer_trace.txt" FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;

报错提醒如下:

(1290, 'The MySQL server is running with the --secure-file-priv option so it cannot execute this statement')

起因剖析

查看零碎变量 secure_file_priv

SHOW VARIABLES LIKE "secure_file_priv";

+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv | NULL  |
+------------------+-------+

MySQL 对于导入导出的目录是有限度的,只容许指定的目录能力导入导出。

此处变量值为 NULL,即没设置容许操作的目录,所以没法导出到文件。

常识解读

名词 含意
Command-Line Format --secure-file-priv=dir_name
System Variable secure_file_priv
Scope Global
Dynamic No
Type String
Default Value platform specific
Valid Values empty stringdirnameNULL

secure_file_priv 这个变量被用于限度导入和导出的数据目录,比方 LOAD DATASELECT ... INTO OUTFILE 语句,以及 LOAD_FILE() 函数。这些操作限度了哪些用户领有文件操作权限。

secure_file_priv 有些设置选项:

  • 如果为空,不做目录限度,即任何目录均能够。
  • 如果指定了目录,MySQL 会限度只能从该目录导入、或导出到该目录。目录必须已存在,MySQL 不会主动创立该目录。
  • 如果设置为 NULL,MySQL 服务器禁止导入与导出性能。

该变量的默认值,是由编译时的 CMake 选项而定,具体可参考官网文档。

MySQL 服务器在启动时,会查看 secure_file_priv 变量值,如果值不平安会在谬误日志中写一个 WARNING 级别的日志。以下状况属于不平安的设置:

  • 值为空
  • 值为 --datadir 目录或其子目录
  • 所有用户均有权限拜访的目录

比方当我设置为空时,谬误日志中就多了这么条:

[Warning] Insecure configuration for --secure-file-priv: Current value does not restrict location of generated files. Consider setting it to a valid, non-empty path.

如果配置的目录并不存在,MySQL 服务器也会写一条谬误日志。例如:

[ERROR] Failed to access directory for --secure-file-priv. Please make sure that directory exists and is accessible by MySQL Server. Supplied value : /path/not/exist

解决方案

  • 如果变量值为 NULL,那么只能批改服务器配置:

    批改 my.cnf 文件,在 [mysqld] 块下,如果没有 secure_file_priv 则新增

    指定目录:secure_file_priv=/path/to/data

    不限目录:secure_file_priv=

    禁止操作:secure_file_priv=NULL

  • 如果变量值为具体目录,则能够思考导出到指定目录,或者从指定目录导出。
  • 如果变量值为空,则能够应用任意目录。

参考资料

  • MySQL 5.7 Reference Manual: Server System Variables

感谢您的浏览,感觉内容不错,点个赞吧 😆
原文地址: https://shockerli.net/post/mysql-secure-file-priv/

正文完
 0