MySql Access denied for user

  • Hallo Forum,

    Das gebuchte Produkt ist Webhosting 4000.

    Nach dem ich mich am MySql Server authentifiziert und auf die Datenbank geschaltet habe will ich eine eine bestimmte Spalte in MySql ausgeben.


    Dazu verwende ich folgende Zeile:


    select id, name, description from articles;


    Das funktioniert wie erwartet.

    Sobald ich die Ausgabe in eine Datei umleite bekomme ich die Fehlermeldung:


    ERROR 1045 (28000): Access denied for user '$$$'@'%' (using password: YES)

    ($$$ steht für den verwendeten user)


    Diese SQL Zeile wirft den Fehler

    select id, name, description from articles into outfile '/tmp/articles.txt';


    Doku: https://dev.mysql.com/doc/refman/5.7/en/select-into.html


    So richtig leuchtet mir die Fehlermeldung nicht ein, denn entweder habe ich das recht die Ausgabe zu listen oder eben nicht.

    Habe ich das Recht zu listen dann erwarte ich das ich sie auch in eine Datei leiten darf, anstelle auf den Bildschirm.

    Was ich mir vorstellen kann ist das die Fehlermeldung vom OS kommt und MySql annimt das in das /tmp Verzeichniss

    des MySql Servers verwendet werden soll. Ich gehe davon aus das ich dort keine Schreibrechte habe.


    In dem Fall fehlt mir die Information wie ich den richtigen Pfad in mein Webhosting 4000 Ordner angebe.


    Kann mir hierbei unter die Arme gegriffen werden?


    Danke und viele Grüße

  • Gut möglich dass into outfile beim Webhosting verboten ist. Die Datei würde ja mit den Rechten des Mysql Servers erstellt (glaub ich zumindest) und das will man natürlich nicht im shared Webhosting. Genauso wie man nicht will dass du in Mysql Dateien in Tabellen leiten kannst. Sowas wie /etc/passwd zum Beispiel.

    Du hast ja im Webhosting auch im chroot wahrscheinlich noch nichtmal Zugriff auf das echte /tmp - mit PHP vielleicht...

  • Hi

    schön das ich so viele und schnelle Antworten bekommen habe. Ich gebe mir Mühe mit einer verständlichen Lösung.


    1.) Mit dem Aufruf von mysql -h host bin ich auf einem anderen Rechner. (Das hatte ich meiner Hilfeanfrage nicht geschrieben.)


    2.) Die Meldung (ERROR 1045 ...) habe ich Fehlinterpretiert

    Der Fehler wurde nicht von MySQL geworfen sondern vom OS und an MySql weitergereicht.


    Von der Terminal aus funktioniert alles wie gewünscht.



    Lösung:

    Mit der folgen Zeile erzeuge ich mir eine Datei mit der Datenbankabfrage.


    echo "select id, name, description from articles" > select.sql


    Die leite mit dem '<' Zeichen zum MySql Server, die Antwort des Servers leite ich mit dem '>' in die Datei "datenbankFeedback.txt".


    Hier die komplette Zeile:

    mysql MeinDatenbankName -P 3306 -uMeinDatenbankUserName -h MeineDatenbankIp -p < select.sql > datenbankFeedback.txt


    Doku:

    https://dev.mysql.com/doc/refman/8.0/en/mysql.html


    Allen ein schönes Wochenende

  • Du kannst das Passwort und alle anderen Zugangsdaten übrigens auch bequem über --defaults-file übergeben. Die angegebene Datei sollte so aussehen:

    Code: mysql.cnf
    1. [client]
    2. host = 10.1.2.3
    3. user = k12345_foobar
    4. password = myssecretpassword
    5. #default-character-set = utf8mb4
    6. database = k12345_foobar

    Die Datei sollte logischerweise nicht dort liegen, wo sie über HTTP erreichbar ist. Dateirechte auf 0600 setzen würde ich ebenfalls empfehlen.