【问题标题】:Permission denied mysql outfile权限被拒绝 mysql outfile
【发布时间】:2018-12-06 20:45:05
【问题描述】:

我试图了解在执行 MySQL 过程时调用了哪个用户,因为我的过程试图创建一个文件,但由于权限问题而无法创建该文件。

这是我的程序:

CREATE PROCEDURE `EXPORT_TEST`()
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY INVOKER
COMMENT ''
BEGIN

DECLARE VAR_INS INT(10);
DECLARE VAR_DT_DEBUT DATETIME;


SET VAR_DT_DEBUT = CURRENT_TIMESTAMP;

INSERT INTO BC_ALIM (NOM_TABLE, DATE_DEBUT)
  VALUES('EXPORT_TEST', VAR_DT_DEBUT);

BEGIN

SELECT * INTO OUTFILE '/home/bureau/IMPORTS/fichierSortie3.csv'
FIELDS TERMINATED BY ';'
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
FROM db_baby_concept.BC_TYPE_LIVRAISON;
END;
END

感谢您的帮助。

【问题讨论】:

  • 当你运行一个程序时,它默认使用创建者的权限。
  • L'utilisateur MySQL?

标签: mysql


【解决方案1】:

MySQL 存储过程有一个SQL SECURITY 特性,它指定了运行过程代码的安全联系人。这可以是DEFINERINVOKER,默认为DEFINER。因此,当您运行存储过程时,它会以定义该过程的用户的权限执行;如果他们没有FILE 权限,将无法创建文件。

您可以改为将过程的安全性设置为INVOKER。然后它将使用您的权限而不是创建者的权限。

CREATE PROCEDURE procName()
SQL SECURITY INVOKER
BEGIN 
    ...
END;

另外,该文件是由 MySQL 服务器进程写入的,因此用于服务器的 Linux 用户 ID 需要对包含该文件的目录具有写入权限。所以你可能需要让你的IMPORTS 目录是世界可写的。而如果设置了secure_file_priv系统变量,则只能写入那里命名的目录。

【讨论】:

  • 我已经更改了程序,但我仍然拒绝访问(请参阅我的帖子)谢谢
  • IMPORTS 目录是全局可写的吗?
  • 是 chmod -R 777
  • 这对数据库没有任何影响吗?
猜你喜欢
  • 2021-05-03
  • 2016-04-04
  • 2017-04-10
  • 1970-01-01
  • 2017-08-05
  • 2015-08-30
  • 1970-01-01
相关资源
最近更新 更多