我试图理解在执行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
谢谢您的帮助。
答案 0 :(得分:0)
MySQL存储过程具有SQL SECURITY
特性,它指定运行过程代码的安全联系人。可以是DEFINER
或INVOKER
,默认值为DEFINER
。因此,当您运行存储过程时,它会在定义该过程的用户的权限下执行;如果他们没有FILE
特权,将无法创建文件。
您可以将过程的安全性设置为INVOKER
。然后它将使用您的权限,而不是创建者的权限。
CREATE PROCEDURE procName()
SQL SECURITY INVOKER
BEGIN
...
END;
此外,文件是由MySQL服务器进程编写的,因此用于服务器的Linux用户ID需要对包含该文件的目录具有写权限。因此,您可能需要使IMPORTS
目录可写。而且,如果设置了secure_file_priv
系统变量,则只能写入在那里命名的目录。