Ausführen von shell-Befehl von MySQL
Weiß ich, was ich Suche, ist wahrscheinlich eine Sicherheitslücke, aber da ich es geschafft, es zu tun in der Oracle und SQL Server, ich werde give it a shot:
Ich bin auf der Suche nach einem Weg, um das ausführen einer shell-Befehl aus einer SQL-Skript auf MySQL. Es ist möglich, erstellen und verwenden Sie eine neue gespeicherte Prozedur, wenn nötig.
Hinweis: ich bin nicht auf der Suche nach der SYSTEM-Befehl die mysql-Kommandozeilen-tool bietet. Statt ich bin auf der Suche nach so etwas wie dieses:
BEGINNEN, WENN
COND1...
EXEC_OS cmd1; ELSE
EXEC_OS cmd2; END;
wo EXEC_OS ist die Methode, um invocate mein code.
InformationsquelleAutor Moshe | 2008-11-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Möchten Sie vielleicht zu prüfen, schreiben von Skripts in eine mehr ausgereifter scripting-Sprache wie Perl, Python, PHP oder Ruby. Alle diese Sprachen haben Bibliotheken zum ausführen von SQL-Abfragen.
Es gibt keine integrierte Methode, die in der gespeicherten Prozedur Sprache für die Ausführung von shell-Befehlen. Dies wird als eine schlechte Idee, nicht nur, weil es eine Sicherheitslücke, sondern weil irgendwelche Effekte von shell-Befehlen nicht gehorchen transaction isolation oder rollback, wie die Auswirkungen von SQL-Operationen, die Sie tun, in der gespeicherten Prozedur:
Wenn
MyProcedure
haben so etwas erstellen oder Bearbeiten Sie eine Datei, oder senden Sie eine E-Mail, etc., diese Operationen würden nicht zurück Rollen.Ich würde empfehlen, tun Sie Ihre SQL-Arbeit in der gespeicherten Prozedur, und andere arbeiten in der Anwendung, die die gespeicherte Prozedur aufruft.
R: Es ist ein strittiger Punkt, da MySQL gespeicherte Prozeduren nicht unterstützen, laufen Sie ein shell-Befehl sowieso.
InformationsquelleAutor Bill Karwin
Dies ist nicht so sehr eine Antwort auf die Frage, wie es gerechtfertigt ist, für diese Art der Funktionalität - daher negieren diejenigen, die sagen würden "Sie sollten etwas anderes tun" oder "warum würden Sie wollen".
Ich habe eine Datenbank, die ich bin versucht zu halten, strenge Regeln auf - ich will nicht Waisen überall. Die referenzielle Integrität überprüft werden, helfen Sie mir mit diesem auf die Tabelle, aber ich habe zu halten Sie einige der Daten als Dateien im Dateisystem (dies ist ein Ergebnis aus einem direkten Auftrag von meinem Chef, keine Speicherung der binären Daten in der Datenbank selbst).
Ist die offensichtliche Lösung hier ist ein trigger, der feuert auf Löschung eines Datensatzes, der dann automatisch löscht die zugehörige externe Datei.
Nun, ich wissen, dass die UDF ' s eventuell eine Lösung, aber das scheint wie eine Menge von C/C++ einfach eine Datei löschen. Sicher die Datenbank-Berechtigungen selbst würde mindestens einige Sicherheit von Möchtegern-Angreifer.
Jetzt, ich erkennen, dass ich könnte schreiben Sie ein shell-Skript oder etwas ähnliches, die könnten löschen Sie die Tabelle Eintrag und gehen Sie dann und löschen Sie die zugehörige Datei, aber wieder,, der außerhalb der Domäne der Datenbank sich. Wie ein Alter Lehrer sagte mal zu mir "die Regeln des Geschäfts sollte sich in den Regeln der Datenbank". Wie man deutlich sehen kann, kann ich nicht erzwingen, dies mit MySQL.
InformationsquelleAutor Nathan Crause
sehen do_system() in http://www.databasesecurity.com/mysql/HackproofingMySQL.pdf
InformationsquelleAutor Fuangwith S.
Laut dieser Beitrag am forums.mysql.com die Lösung ist die Verwendung der MySQL_Proxy.
InformationsquelleAutor Eigir