Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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
Php MySQL会话/用户的文件权限_Php_Mysql_Mysql Error 1045 - Fatal编程技术网

Php MySQL会话/用户的文件权限

Php MySQL会话/用户的文件权限,php,mysql,mysql-error-1045,Php,Mysql,Mysql Error 1045,当有人在my MySQL数据库中注册时,此功能必须工作: mysql_query("SELECT mail FROM users INTO OUTFILE 'test.txt'"); 但是我得到了错误 拒绝用户“registerdb”@“%”的访问(使用密码:是) 那么我如何向会话/用户授予文件写入权限呢?您需要先删除MySQL之外的文件,MySQL中没有可以删除或覆盖文件的功能。 这是一个安全措施,你应该感谢这一事实 请注意,要

当有人在my MySQL数据库中注册时,此功能必须工作:

mysql_query("SELECT mail 
               FROM users 
               INTO OUTFILE 'test.txt'");
但是我得到了错误

拒绝用户“registerdb”@“%”的访问(使用密码:是)


那么我如何向会话/用户授予文件写入权限呢?

您需要先删除MySQL之外的文件,MySQL中没有可以删除或覆盖文件的功能。
这是一个安全措施,你应该感谢这一事实

请注意,要弄清楚MySQL将其文件存储在何处可能很棘手

我通常使用

LOAD DATA INFILE 'nonexistingfile' INTO validtable
生成的错误为您提供当前数据库的完整路径,
SELECT。。。输入输出文件
将写入。
您可以使用多种方式删除(或更好地移动)文件,这时会想到
cron作业

您甚至可以编写一个自定义的UDF来为您执行删除操作,尽管这是一个主要的安全风险,而这样做的程序员应该遭受比可怕的事情更糟糕的命运

另一个选择是这样做

START TRANSACTION;
SELECT @today:= CURDATE();
INSERT INTO saved_mail_log (filename, whensaved, user_id) 
  VALUES (CONCAT(@today,'mailsave.csv'), @today, '1234');
SELECT mail FROM users WHERE user_id = '1234' INTO OUTFILE CONCAT(@today,'mailsave.csv');
COMMIT;    
我不能100%确定您是否可以使用函数来创建
OUTFILE
参数,否则您必须选择该值并使用动态SQL将其注入查询

您可以使用以下方式获取最新文件:

SELECT * FROM saved_mail_log WHERE user_id = '1234' ORDER BY whensaved DESC LIMIT 1

检查该用户的权限:

显示“registerdb”@“%”的授权

如果没有列出的文件权限,只需添加它:

授予文件。到“registerdb”@“%”

然后:

同花顺特权

但是要注意,如果您在
*.*.
上授予文件权限,您实际上是在


限制。作为安全预防措施,MySQL不会覆盖已经存在的文件。它只会创建新文件。我仍然无法使用查询sql_查询(“选择从用户发送的邮件到输出文件‘test.txt’”);即使文件不存在。。。。因此,解决方案必须是将权限授予我的会话/用户,但我必须如何做到这一点?您使用的是哪个MySQL版本?答案很好。应该位于顶部,而不是另一个。但是要注意,在*.上执行grant file操作实际上是在通过服务器为该用户提供对任何内容的完全文件访问权限。确保你那么信任他/她