4

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

 3 years ago
source link: https://shockerli.net/post/mysql-secure-file-priv/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

2021-08-19 约 775 字 预计阅读 2 分钟

在执行导出 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

  • 如果变量值为具体目录,则可以考虑导出到指定目录,或者从指定目录导出。

  • 如果变量值为空,则可以使用任意目录。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK