PowerShell: Authentication - mysql native password failed with Access denied
Hallo liebe Leute,
ich habe viele andere Themen dazu gefunden, aber keines davon hat mich einen Schritt weiter gebracht. Ich denke, es ist nur eine dumme Kleinigkeit, aber ich kann das Problem leider nicht finden und arbeite seit Tagen daran ^^
Zudem hoffe ich mal, das ich hier im richtigen Thema bin; wenn nicht, bitte ich das ob meiner ersten Frage hier zu entschuldigen und mir ggf. den Weg zu weisen.
Basis:
- Windows Server 2016 Rechenzentrum
- MariaDB 10.4.10, MySQL.exe 15.1
- PowerShell 5.1.14393
- PS als Administrator gestartet
Versuch 1:
Melde ich mich mit "mysql -hlocalhost -uroot -pTotalGeheim" aus der PS-Shell an, funktioniert alles ohne Probleme.
Versuch 2:
Wenn ich ein PS Script (nicht meins) starte, bekomme ich ein "Access Denied" für den Benutzer root mit identischem Passwort. Die genaue Meldung lautet: Ausnahme beim Aufruf von „Open“ mit 0 Argument(en): „Authentication to host ‚localhost‘ for user ‚root‘ using method ‚mysql_native_password‘ failed with message: Access denied for user ‚root‘@‘localhost‘ ( Passwort nutzen: JA)"
Die entsprechende PS-Funktion sieht folgendermaßen aus:
Benutzer und Passwort wurden hundertfach geprüft und sind definitiv identisch (Kreuztest via copy&past).
"local-infile = 1" ist bereits in "my.ini" unter [mysql] und unter [mysqld] gesetzt. Es gibt auch eine "dontprotecthome.conf" mit dem Inhalt "ProtectHome=false" im BIN-Verzeichnis, obwohl ich denke, dass dies nur unter Linux relevant ist.
Es wäre wirklich super nett, wenn mir da jemand helfen könnte; leider sind mir die Ideen ausgegangen.
Grüße
Micha
ich habe viele andere Themen dazu gefunden, aber keines davon hat mich einen Schritt weiter gebracht. Ich denke, es ist nur eine dumme Kleinigkeit, aber ich kann das Problem leider nicht finden und arbeite seit Tagen daran ^^
Zudem hoffe ich mal, das ich hier im richtigen Thema bin; wenn nicht, bitte ich das ob meiner ersten Frage hier zu entschuldigen und mir ggf. den Weg zu weisen.
Basis:
- Windows Server 2016 Rechenzentrum
- MariaDB 10.4.10, MySQL.exe 15.1
- PowerShell 5.1.14393
- PS als Administrator gestartet
Versuch 1:
Melde ich mich mit "mysql -hlocalhost -uroot -pTotalGeheim" aus der PS-Shell an, funktioniert alles ohne Probleme.
Versuch 2:
Wenn ich ein PS Script (nicht meins) starte, bekomme ich ein "Access Denied" für den Benutzer root mit identischem Passwort. Die genaue Meldung lautet: Ausnahme beim Aufruf von „Open“ mit 0 Argument(en): „Authentication to host ‚localhost‘ for user ‚root‘ using method ‚mysql_native_password‘ failed with message: Access denied for user ‚root‘@‘localhost‘ ( Passwort nutzen: JA)"
Die entsprechende PS-Funktion sieht folgendermaßen aus:
$Today = (Get-Date).ToString("yyyyMMdd")
$DBErrorLog = "$PSScriptRoot\$Today-DBError.log"
$ConnectionString = "server=" + $MySQLHost + ";port=" + $MySQLPort + ";uid=" + $MySQLUserName + ";pwd=" + $MySQLPassword + ";database=" + $MySQLDatabase + ";SslMode=" + $MySQLSSL + ";Default Command Timeout=" + $MySQLCommandTimeOut + ";Connect Timeout=" + $MySQLConnectTimeout + ";"
$Error.Clear()
Try {
[void][System.Reflection.Assembly]::LoadWithPartialName("MySql.Data")
$Connection = New-Object MySql.Data.MySqlClient.MySqlConnection
$Connection.ConnectionString = $ConnectionString
$Connection.Open()
$Command = New-Object MySql.Data.MySqlClient.MySqlCommand($Query, $Connection)
$DataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($Command)
$DataSet = New-Object System.Data.DataSet
$RecordCount = $DataAdapter.Fill($DataSet, "data")
$DataSet.Tables
}
Catch {
Debug "[ERROR] DATABASE ERROR : Unable to run query : $Query $($Error)"
}
Finally {
$Connection.Close()
}
}
Benutzer und Passwort wurden hundertfach geprüft und sind definitiv identisch (Kreuztest via copy&past).
"local-infile = 1" ist bereits in "my.ini" unter [mysql] und unter [mysqld] gesetzt. Es gibt auch eine "dontprotecthome.conf" mit dem Inhalt "ProtectHome=false" im BIN-Verzeichnis, obwohl ich denke, dass dies nur unter Linux relevant ist.
Es wäre wirklich super nett, wenn mir da jemand helfen könnte; leider sind mir die Ideen ausgegangen.
Grüße
Micha
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3721175546
Url: https://administrator.de/contentid/3721175546
Ausgedruckt am: 26.11.2024 um 01:11 Uhr
11 Kommentare
Neuester Kommentar
( Passwort nutzen: JA)
Die Fehlermeldung sagt es schon eindeutig und zwar das in Klammern. Root wurde auf deine Datenbank, bzw. Tabelle nicht mit einem Passwort berechtigt! Also entweder fehlt für root@localhost der Berechtigungseintrag für die DB/Tabelle oder der Berechtigungseintrag für diese DB/Tabelle hat kein Passwort, das sagt nämlich die Fehlermeldung. Wenn du also mal den Parameter "PWD" inklusive Passwort im Connectionstring weglässt und es funktioniert dann ist der Berechtigungseintrag fehlerhaft!Des weiteren funktioniert das Verbinden hier natürlich nur vom lokalen Host aus da "localhost" in der Berechtigungen aufgeführt ist.
PUSH
UP BH 😂und arbeite seit Tagen daran ^^
Wow, so viel zeit möchte ich mal für sowas bekommen, da wäre unser eins bereits gefeuert und für unfähig befunden worden ...Zitat von @CBX-Micha:
Danke für den Hinweis, aber der ist leider nicht zielführend...
Schau mal meinen "Versuch 1". Auf der Kommandozeile aus einer PS-Shell kann ich mich problemlos mit dem Benutzer "root", dem Kennwort "blablub" an "localhost" anmelden.
Dieser Vergleich hat überhaupt nichts zu sagen! Datenbanken haben ihre eigenen Berechtigungseinträge!!!Danke für den Hinweis, aber der ist leider nicht zielführend...
Schau mal meinen "Versuch 1". Auf der Kommandozeile aus einer PS-Shell kann ich mich problemlos mit dem Benutzer "root", dem Kennwort "blablub" an "localhost" anmelden.
Und selbstverständlich ist für "root" ausschließlich die Anmeldung von "localhost" und "127.0.0.1" zulässig. Aber was anderes macht das Script ja auch nicht.
Doch, es fragt eine bestimmte Datenbank ab!Es muss also was ganz konkret PS- spezifisches sein, was hier die Anmeldung an MySQL verhindert.
Nein, die Fehlermeldung ist eindeutig und kommt von MySQL nicht von der Powershell!Ich habe schon fast so den Verdacht, dass das PS-Script hier das Kennwort eben nicht als Klartext übergibt, sondern irgend etwas damit anstellt...
Nein. Das liegt eindeutig am Berechtigungseintrag für diese DB/Tabelle auf die zugegriffen werden soll. Die Fehlermeldung ist eindeutig! Hab ich schon öfter gesehen, lag immer am Berechtigungseintrag der DB/Tabelle.pwd=" + $MySQLPassword + "
Enthält weder Quoting noch evt. escaping - und an das PS Sonderzeichen in normalen Anführungszeichen speziell behandelt hast du gedacht?Zitat von @CBX-Micha:
Das Script ist nicht von mir und nach Aussage zumindest eines anderen Anwenders läuft das bei denen so out-of-the-box.
Heißt erst mal nix.Das Script ist nicht von mir und nach Aussage zumindest eines anderen Anwenders läuft das bei denen so out-of-the-box.
Hmmm... Das Kennwort enthält zumindest Ziffern, ein Dollar-Zeichen und Bindestriche.
Ziffern und Bindestriche/Unterstriche dürften keine Probleme machen, aber vielleicht das Dollar-Zeichen?
Da ham wirs doch, das Dollarzeichen gehört zu einer Variablen und das versucht die PowerShell zu expandieren wenn es innerhalb von normalen Anführungszeichen steht! Ergo definiere dein Passwort innerhalb von Hochkommas dann findet keine Variable oder Escape Sequence Expansion stattZiffern und Bindestriche/Unterstriche dürften keine Probleme machen, aber vielleicht das Dollar-Zeichen?
$MySQLPassword = 'Passw0rdWith$signInSingleQuotesIsNoProblem'