2009-03-21 18 views
14

次のクエリを使用して、MySQLのSQLクエリの出力をテキストファイルにキャプチャしようとしています。ファイルへのクエリの出力でアクセス拒否エラーが発生しました

select count(predicate),subject from TableA group by subject into outfile '~/XYZ/output.txt'; 

次のエラーが発生します。

ERROR 1045(28000):アクセスは(パスワードを使用して:YES)、 '%' @ユーザー 'ユーザー名' を否定し

私が間違っているつもりです任意のアイデアを、?許可に関連する問題ですか?

+0

正確には何をしていますか? mysqlクライアントコンソールまたはシステム端末にコマンドを入力していますか? – Vasil

+0

プログラミング関連ではありません – cletus

+0

私はMySQLコンソールを通してコマンドを入力しています – Arnkrishn

答えて

30

Outfileは、mysql自身の許可です。

すべてがあればそれが含まれています。

しかし、SELECT、INSERT、UPDATE、DELETE、DROP、CREATEなどの安全なコレクションを持っていて、OUTFILEではなく、「outfileに」はクエリでは機能しません。

なぜなら、mysqlからファイルにアクセスすると、mysqlユーザーがアクセスできるファイルにアクセスできるため、書き込みの目的であっても、MySQL内のファイルにアクセスするとセキュリティ上のリスクがあるからです。ファイルベースのアクセス許可。

これを回避するには、sqlを実行するために使用しているシェル/言語の出力に直接クエリを実行できます。ここで

>$ echo "select count(predicate),subject from TableA group by subject" | mysql -u yourusername -p yourdatabasename > ~/XYZ/outputfile.txt 

* nixの一例である。しかし、「\」なしで1行にそれをすべて行うか、改行をエスケープするために「\」を使用します。

ここで起こっているのは、あなたがmysqlクライアントにクエリを実行していて、結果が吐き出されていて、出力をファイルに出力しているということです。したがって、ファイルはmysql内から呼び出されることはありません。mysqlが実行された後に呼び出されます。

情報を取得するためにmysqlを使用して、自分のユーザーシェルからファイルにデータをダンプしても問題ありません。

または、いずれかの方法でoutfile mysql権限を取得する方法を見つけてください。

+0

これは素晴らしいです!本当にありがとう – ajay

4

あなたのシステム(あなたが管理者)であり、それを保護する方法がわかっている場合は、これらのアクセス許可を有効にする方法です。

USE mysql; 
UPDATE user SET File_priv = 'Y' WHERE User = 'db_user'; 
FLUSH PRIVILEGES; 
関連する問題