Frage

Ich arbeite mit einer MySQL-Abfrage, die in eine Ausgabedatei schreibt. Ich betreibe diese Abfrage einmal täglich oder zwei und so möchte ich in der Lage sein, den outfile zu entfernen, ohne zu su oder sudo zurückgreifen zu müssen. Der einzige Weg, ich denke, kann das passieren zu machen ist die outfile wie von jemand anderem als dem mysql Benutzer gehört geschrieben haben. Ist das möglich?

Edit: Ich bin nicht in eine Datei umleiten, ich den INTO OUTFILE Teil einer ausgewählten Abfrage Ausgabe in eine Datei bin mit

.

Wenn es hilft:

mysql --version
mysql  Ver 14.12 Distrib 5.0.32, for pc-linux-gnu (x86_64) using readline 5.2

War es hilfreich?

Lösung

Die Ausgabedatei wird durch den mysqld-Prozess erstellt, nicht von Ihrem Client-Prozess. Deshalb ist die Ausgabedatei durch die uid und gid des mysqld-Prozess gehört werden müssen.

können Sie vermeiden, dass sudo mit auf die Datei zugreifen, wenn Sie es von einem Prozess unter einem uid oder gid zuzugreifen, die auf die Datei zugreifen können. Mit anderen Worten, wenn mysqld Dateien durch uid und gid „mysql“ / „mysql“, fügen Sie dann Ihr eigenes Konto zu einer Gruppe „mysql“ Eigentum schafft. Dann sollten Sie in der Lage sein, auf die Datei zuzugreifen, sofern die Erlaubnis Modus Dateigruppenzugriff enthält.

Edit:

Sie sind das Löschen einer Datei in / tmp, mit einem Verzeichnis Berechtigungsmodi von rwxrwxrwt. Der Sticky-Bit ( ‚t‘) bedeutet, dass Sie Dateien entfernen können nur dann, wenn Ihre uid die gleichen wie der Besitzer der Datei ist, unabhängig von Berechtigungen für die Datei oder das Verzeichnis.

Wenn Sie Ihre Ausgabedatei in einem anderen Verzeichnis speichern, die nicht den Sticky-Bit gesetzt hat, sollen Sie in der Lage sein, die normalerweise die Datei zu entfernen.

Lesen Sie diesen Auszug aus der man-Seite für sticky (8):

STICKY DIRECTORIES

Ein Verzeichnis, das `Sticky-Bit‘ gesetzt wird, wird ein Append-only-Verzeichnis, oder, genauer gesagt, ein Verzeichnis, in dem das Löschen von Dateien beschränkt. Eine Datei in einem klebrigen Verzeichnis kann nur von einem Benutzer entfernt oder umbenannt werden, wenn der Benutzer der Berechtigung für das Verzeichnis hat schreiben, und der Benutzer ist der Besitzer der Datei, der Besitzer des Verzeichnisses oder die Superuser. Diese Funktion ist sinnvoll angewendet auf Verzeichnisse wie / tmp, das sollten öffentlich beschreibbar sein müssen, aber Benutzer die Lizenz verweigern, willkürlich zu löschen oder jeweils anderen Dateien umbenennen.

Andere Tipps

Nicht mit der "SELECT ... INTO OUTFILE" Syntax, Nr.

Sie müssen die Abfrage (dh Client) als einen anderen Benutzer laufen, und die Ausgabe umleiten. Zum Beispiel bearbeiten Sie Ihre crontab den folgenden Befehl ein, wenn Sie ausführen möchten:

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

Das wird als Benutzer erstellen /tmp/outfile.txt die crontab sind Sie den Befehl hinzugefügt hat.

Wenn Sie einen anderen Benutzer ausführen, um die Abfrage von cron haben, wird die Datei als dieser Benutzer erstellen.

ich nur tun

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

und fügen

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

und

sudo service mysql restart

Und das ist es, ich kann einfach einen beliebigen Dateinamen tun SELECT INTO OUTFILE

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top