当我的MySQL数据库中注册了某人时,此功能必须正常工作:
mysql_query("SELECT mail
FROM users
INTO OUTFILE 'test.txt'");
但是我收到了错误
拒绝访问用户'registerdb'@'%'(使用密码:是)
那么我如何向会话/用户提供FILE写入权限?
答案 0 :(得分:9)
Chek获取该用户的权限:
为'registerdb'显示资助@'%'
如果没有列出的FILE权限,只需添加它:
在上授予文件。到'registerdb'@'%'
然后:
FLUSH PRIVILEGES;
但请注意,在*.*
上授予FILE权限时,您基本上是giving that user full access to any file the server。
答案 1 :(得分:1)
你需要首先删除MySQL以外的文件,MySQL中有无功能可以删除或覆盖文件。
这是一项安全措施,您应该感谢这一事实。
请注意,确定MySQL存储文件的位置可能很棘手。
我通常使用
LOAD DATA INFILE 'nonexistingfile' INTO validtable
生成的错误为您提供SELECT ... INTO OUTFILE
将写入的当前数据库的完整路径
您可以使用多种方式删除(或更好地移动)文件,我会想到cron-job
您甚至可以编写一个自定义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