0

いくつかのビューに基づいて計算を行い、結果をファイルに書き込むクエリを実行しています。次のようになります。

select `v1`.`id` AS `id`,`v2`.`name` AS `name`,
`v2`.`nbr` AS `nbr`,
`v1`.`nbr` AS `total`,
(`v2`.`nbr` / `v1`.`nbr`) AS `percent`

INTO OUTFILE '/home/username/mysqldump/filename.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'

from `v2` join `v1`

where `v2`.`id` = `v1`.`id`

それはうまくいきます。このクエリに基づいてビューを作成しましたが、期待どおりにドロップインの代替として機能しません。SHOW CREATE VIEW の「ビューの作成」部分は次のとおりです。

 CREATE ALGORITHM=UNDEFINED  DEFINER=`user`@`localhost`
       SQL SECURITY DEFINER
 VIEW `view_name` AS
  select `v1`.`id` AS `id`,
         `v2`.`name` AS `name`,
         `v2`.`nbr` AS `nbr`,
         `v1`.`nbr` AS `total_pvs`,
          (`v2`.`nbr` / `v1`.`nbr`) AS `percent`
  from (`v2` join `v1`) where (`v2`.`id` = `v1`.`id`)

動作しないクエリは次のとおりです。

 SELECT * INTO OUTFILE '/home/username/mysqldump/filename.csv'
 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
 LINES TERMINATED BY '\n'
 FROM view_name;

このエラーが発生しました:

ERROR 1356 (HY000): View 'database_name.view_name' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them

私はルートとして実行しているので、権利の問題はないと思います。MySQL の観点から、このクエリを無効にしているのは何でしょうか? バージョン 5.5.32-0ubuntu0.12.04.1 (Ubuntu) を実行しています

編集:実行SELECT * FROM view_nameすると、期待どおりにレコードが返されます。ただし、何千もの行があり、しっかりとした書式設定が必要な場合は、むしろINTO OUTFILE.

4

2 に答える 2

2

このスレッドは少し古くなりつつありますが、このテーマに関するいくつかの (未解決の) 投稿の中で群を抜いて最高のプレゼンテーションを持っているので、ここに私が見つけたものがあります:

ご想像のとおり、「ファイルに」部分を追加するとエラーが表示されるため、不足している権限はファイルへのアクセス権限です (はい、エラー メッセージは誤解を招きます)。

実際、ビューの定義者にグローバル FILE 権限を付与すると、エラーは表示されなくなります。(そして、それはエラーメッセージを2番目の方法で誤解を招くようにします.invokerのアクセス許可はそこに関係がないように見えます-しかし、私見です。)

于 2015-10-26T11:11:38.243 に答える