web-dev-qa-db-ja.com

MYSQLをoutfileに「アクセスが拒否されました」-しかし、ユーザーには「ALL」アクセス権があります。フォルダはCHMOD 777です

何か案は?

SELECT * INTO OUTFILE '/home/myacnt/docs/mysqlCSVtest.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '*'
LINES TERMINATED BY '\n'
FROM tbl_property 
WHERE managerGroupID = {$managerGroupID}

エラー:

Access denied for user 'asdfsdf'@'localhost' (using password: YES)
68
Shackrock

次のSQLコマンドを実行してみてください。

> grant all privileges 
  on YOUR_DATABASE.* 
  to 'asdfsdf'@'localhost' 
  identified by 'your_password';
> flush privileges; 

言及しているフォルダへの書き込みではなく、データベースへの接続に問題があるようです。

また、FILEをユーザー'asdfsdf'@'localhost'に付与していることを確認してください。

> GRANT FILE ON *.* TO 'asdfsdf'@'localhost';
110

正直なところ、私は助成金を処理することを気にしませんでしたし、これは特権がなくても機能しました:

echo "select * from employee" | mysql --Host=HOST --port=PORT --user=UserName --password=Password DATABASE.SCHEMA > output.txt
44
user1028904

@fijaaronが言うように、

  1. GRANT ALLGRANT FILEを意味しません
  2. GRANT FILE*.*でのみ機能します

そうする

GRANT FILE ON *.* TO user;
19
e18r

CP/WHMはPHPMyAdminでrootとしてのユーザー権限を変更する機能を奪ったため、コマンドラインを使用して以下を行う必要があります。

mysql>  GRANT FILE ON *.* TO 'user'@'localhost';

ステップ2は、そのユーザーが特定のフォルダーにファイルをダンプできるようにすることです。これを行うにはいくつかの方法がありますが、最終的にフォルダを置くことになりました:

/home/user/tmp/db

そして

chown mysql:mysql /home/user/tmp/db

これにより、mysqlユーザーはファイルを書き込むことができます。以前のポスターで述べたように、MySQLのtempフォルダーも使用できます。それは本当に重要ではないと思いますが、データを世界に見せたい場合を除き、0777許可(world-writeable)にしたくないことは間違いありません。ファイルが存在する場合、INTO OUTFILEが機能しないため、プロセスをすすいで繰り返したい場合、潜在的な問題があります。ファイルが別のユーザーによって所有されている場合、unlink($file)を実行しようとしても機能しません。私のような人(0777についての妄想)の場合は、次を使用してターゲットディレクトリを設定できます。

chmod($dir,0777)

sQLコマンドを実行する直前に、

chmod($dir,0755)

直後に、unlink(file)を続けてファイルを削除します。これにより、すべてがWebユーザーの下で実行され、mysqlユーザーを呼び出す必要がなくなります。

4
Grindlay