12

出力ファイルに書き込む MySQL クエリを使用しています。私はこのクエリを毎日 1 回か 2 回実行するので、su や sudo に頼らずに outfile を削除できるようにしたいと考えています。私が考えられる唯一の方法は、出力ファイルを mysql ユーザー以外の所有者として書き込むことです。これは可能ですか?

編集:出力をファイルにリダイレクトしていません。選択クエリの INTO OUTFILE 部分を使用してファイルに出力しています。

それが役立つ場合:

mysql --バージョン
mysql Ver 14.12 Distrib 5.0.32、readline 5.2 を使用する pc-linux-gnu (x86_64) 用

4

4 に答える 4

12

出力ファイルは、クライアント プロセスではなく、mysqld プロセスによって作成されます。したがって、出力ファイルは、mysqld プロセスの uid および gid によって所有されている必要があります。

ファイルにアクセスできる uid または gid の下のプロセスからアクセスすると、ファイルにアクセスするために sudo を実行する必要がなくなります。つまり、mysqld が uid および gid "mysql"/"mysql" によって所有されるファイルを作成する場合、独自のアカウントをグループ "mysql" に追加します。その後、ファイルのアクセス許可モードにグループ アクセスが含まれていれば、ファイルにアクセスできるはずです。

編集:

ディレクトリ許可モード rwxrwxrwt で、/tmp 内のファイルを削除しようとしています。スティッキー ビット ('t') は、ファイルまたはディレクトリのアクセス許可に関係なく、uid がファイルの所有者と同じ場合にのみファイルを削除できることを意味します。

スティッキー ビットが設定されていない別のディレクトリに出力ファイルを保存すると、通常どおりファイルを削除できるはずです。

sticky(8) の man ページからの抜粋を読んでください。

スティッキーディレクトリ

「スティッキー ビット」が設定されているディレクトリは、追加専用のディレクトリになります。より正確には、ファイルの削除が制限されているディレクトリになります。スティッキー ディレクトリ内のファイルは、ユーザーがディレクトリの書き込み権限を持ち、ユーザーがファイルの所有者、ディレクトリの所有者、またはスーパーユーザーである場合にのみ、削除または名前変更できます。この機能は、/tmp などのディレクトリに適用すると便利です。これらのディレクトリは、パブリックに書き込み可能である必要がありますが、ユーザーが互いのファイルを任意に削除または名前変更するライセンスを拒否する必要があります。

于 2008-10-23T23:55:35.787 に答える
6

「SELECT ... INTO OUTFILE」構文を使用しないでください。いいえ。

別のユーザーとしてクエリ (クライアント) を実行し、出力をリダイレクトする必要があります。たとえば、crontab を編集して、必要なときにいつでも次のコマンドを実行します。

mysql db_schema -e 'SELECT col,... FROM table' > /tmp/outfile.txt

これにより、コマンドを追加した crontab のユーザーとして /tmp/outfile.txt が作成されます。

于 2008-10-24T02:03:42.127 に答える
1

私はただします

sudo gedit /etc/apparmor.d/usr.sbin.mysqld

と追加

 /var/www/codeigniter/assets/download/* w,

sudo service mysql restart

SELECT INTO OUTFILEこれで、どのファイル名でも簡単に作成できます

于 2010-06-12T11:58:11.150 に答える
1

別のユーザーに cron からクエリを実行させると、そのユーザーとしてファイルが作成されます。

于 2008-10-23T22:54:18.000 に答える