Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

16 Byte Passwort ändern auf 41 Byte (1500 Einträge)

Frage Entwicklung PHP

Mitglied: Bommel1302

Bommel1302 (Level 1) - Jetzt verbinden

14.12.2012 um 23:50 Uhr, 4335 Aufrufe, 10 Kommentare

Hallo zusammen,

ich hoffe Ihr könnt mir mal wieder helfen.
Ich möchte in einer MYSQL Tabel das die Passwörter der User von 16Byte auf 41 Byte ändern.
Leider habe ich keinen Ansatz wie diese Änderung möglich ist.
Jeder User hat ja ein anderes Passwort und soll dieses nach der Umstellung auch behalten.
Habe es mit dem SQL-Befehl versucht, jedoch ist danach bei allen Usern das Passwort gleich.
UPDATE mysql.user SET Password = PASSWORD('password') WHERE 1;

Wie kann ich die 1500 Datensätze per Script abarbeiten?

Gruß Marcel
Mitglied: Guenni
15.12.2012 um 12:57 Uhr
Hi Bommel1302,

Wie kann ich die 1500 Datensätze per Script abarbeiten?

Du könntest z.B. die Update-Anweisung, . . . set spalte = wert where . . ., spalte = wert where . . . usw.,

in einer Schleife zusammensetzen. Leider hat die Tabelle user keinen eindeutigen Index, z.B. eine ID, und

in den Spalten host und user können Hosts und User auch noch mehrfach unter gleichem Namen vorhanden sein.

Eine korrekte Anweisung wäre dann . . . password = PASSWORD(password) where host = 'host' and user = 'user'

für jede Zeile der Tabelle.


01.
<?php 
02.
$query = "select host, user, password from user"; 
03.
$result = mysql_query($query); 
04.
/* 
05.
* Update-Anweisung in Variable speichern 
06.
*/ 
07.
$update = "update user set "; 
08.
/* 
09.
* Die Änderungs-Anweisung, where-Klausel und ein Komma an die Anweisung anhängen 
10.
*/ 
11.
while($row = mysql_fetch_array($result, MYSQL_ASSOC)){ 
12.
	$update.=" password = PASSWORD(".$row['password'].") where host = ".$row['host']." and user = ".$row['user'].","; 
13.
14.
/* 
15.
* Das letzte Komma entfernen 
16.
*/ 
17.
$update = substr($update, 0, -1); 
18.
/* 
19.
* Ausgabe zum Prüfen 
20.
*/ 
21.
echo $update; 
22.
// mysql_query($update); 
23.
?>
Natürlich nicht selber getestet, da ich meine eigene user-Tabelle nicht verändern will

Gruß
Günni
Bitte warten ..
Mitglied: Bommel1302
15.12.2012, aktualisiert um 14:40 Uhr
Hallo Günni,

danke für die Unterstützung.

Ich haben das mal probiert und habe das Script von Dir angepasst. Ich habe eine eindutige ID der User und die User sind nur einmal in der Datenbank.

Jedoch bekomme ich einen Fehler beim ausführen.

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /XXXXXX/DBUpdate.php on line 23
update username set

Hier das Script
01.
<?  
02.
include("config/config.php"); 
03.
if ($dbhost=="") { 
04.
	echo"<meta http-equiv=\"refresh\" content=\"0; URL=install.php\">"; 
05.
}else{ 
06.
 
07.
08.
 
09.
@session_start(); 
10.
mysql_connect( "$dbhost", "$dbuser", "$dbpass")  or  die("$wort_konnte_datenbankverbindung_nicht_herstellen"); 
11.
mysql_select_db( "$dbname")  or  die("Datenbank nicht gefunden"); 
12.
 
13.
 
14.
$query = "select id, username, pwd from user";  
15.
$result = mysql_query($query);  
16.
/*  
17.
* Update-Anweisung in Variable speichern  
18.
*/  
19.
$update = "update username set ";  
20.
/*  
21.
* Die Änderungs-Anweisung, where-Klausel und ein Komma an die Anweisung anhängen  
22.
*/  
23.
while($row = mysql_fetch_array($result, MYSQL_ASSOC)){  
24.
$update.=" pwd = PASSWORD(".$row['pwd'].") where host = ".$row['id']." and username = ".$row['username'].",";  
25.
}  
26.
/*  
27.
* Das letzte Komma entfernen  
28.
*/  
29.
$update = substr($update, 0, -1);  
30.
/*  
31.
* Ausgabe zum Prüfen  
32.
*/  
33.
echo $update;  
34.
// mysql_query($update);  
35.
?> 
36.
 
Bitte warten ..
Mitglied: Guenni
15.12.2012 um 17:17 Uhr
Hi Bommel1302,


Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource . . .


Das ist jetzt kein direkter Fehler im Script. mysql_fetch_array erwartet ein Abfrageergebnis,

das von mysql_query geliefert wurde. Der Fehler liegt dann in der Formulierung der Abfrage

und/oder in der Korrektheit der abgefragten Tabellen und Feldnamen.

01.
<?php 
02.
$result = mysql_query($query); 
03.
 
04.
if(!$result){ 
05.
 echo mysql_error(); 
06.
 exit; 
07.
08.
?>

Das Update würde eh' nicht funktionieren, da du die tabelle user abfragst . . .

$query = "select id, username, pwd from user";

. . . aber in der Update-Anweisung eine Tabelle namens username angibst . . .

$update = "update username set ";

Gruß
Günni
Bitte warten ..
Mitglied: Bommel1302
15.12.2012 um 19:42 Uhr
Hallo Günni,

habe das Script entsprechend angepasst.
Es läuft jetzt. Leider hat es nicht den gewünschten Effekt.
Bei der Ausführung wird das Passwort ja ausgelesen aber nur der Hash nicht in den Klartext.
Um das Passwort in ein 41Byte Hash zu wandeln muss es ja einmal im Klartext sein um es dann zu wandeln.
Gibt es hier eine Lösung für?

Gruß Marcel
Bitte warten ..
Mitglied: Pjordorf
15.12.2012 um 20:06 Uhr
Hallo,

Zitat von Bommel1302:
Bei der Ausführung wird das Passwort ja ausgelesen aber nur der Hash nicht in den Klartext.
Was denn sonst? Dachtest du das du so das Passwort in Klarschrift geliefert bekommst?

Um das Passwort in ein 41Byte Hash zu wandeln muss es ja einmal im Klartext sein um es dann zu wandeln.
Wie soll es denn anders gehen? Der 41 Byte lange Hasch ist doch neu berechnet und hat mit dem alten 16Byte langen Hadch doch nichts gemeinsam. Wenn du die Passwörter der 1500 Einträge nicht kennst, dann kann nur der Inhaber der Passwörter dies Ändern. Ist doch auch gut so, oder?

Das http://dev.mysql.com/doc/refman/5.1/de/password-hashing.html hast du verstanden welche Problme dir die Umstellung geben kann?

Gruß,
Peter
Bitte warten ..
Mitglied: Bommel1302
15.12.2012 um 20:15 Uhr
Ja ich habe das verstanden.
Leider hat wohl der Hoster etwas an seinen Einstellungen geändert, so das das Script was seit 2Jahren läuft plötzlich nicht mehr läuft und die 16Byte Hash nicht mehr akzeptiert.
Bei der Eingabe des Passworts durch den User wird ein 41Byte Hash erzeugt, welcher natürlich nicht zu dem Hash in der Datenbank passt.
Gibt es hier eine Lösung um das wieder zum laufen zu bekommen?

Gruß Marcel
Bitte warten ..
Mitglied: nxclass
16.12.2012, aktualisiert um 00:09 Uhr
Das klingt mir stark nach einem PHP update, welches das Standard verhalten des Befehls crypt() geändert hat - wenn Du crypt() verwendest, dann lies mal die Beschreibung auf http://php.net/manual/de/function.crypt.php durch und frag ggf deinen Provider nach den PHP Versionen welche verwendet wurden.

EDIT: .. oder gib uns mal einen Code Schnippsel - welcher zeigt wie bei Dir diese Hashes gebaut werden.
EDIT: der Link von Pjordorf ( http://dev.mysql.com/doc/refman/5.1/de/password-hashing.html ) zeigt eigentlich schon das Problem und die Lösung.
benutze OLD_PASSWORD() in der SQL Anweisung wenn der Hash 16 Zeichen lang ist - wenn dieser bei der Prüfung passt, sollte ggf gleich ein Hash mit der aktuellen PASSWORD() Funktion angelegt werden.
Bitte warten ..
Mitglied: Bommel1302
16.12.2012 um 09:56 Uhr
Laut dem Hoster hat sich die PHP Version 5.2 nicht geändert.
Leider bin ich nicht der Experte in PHP und Versuche die Anmeldung wieder zum laufen zu bringen.
Ich versuche mal ob ich den Code finde in dem der Hash gebaut wird.
Ferde ihn dann posten.

@nxclass

kannst du das mir etwas genauer erklären?

Zitat von nxclass:
benutze OLD_PASSWORD() in der SQL Anweisung wenn der Hash 16 Zeichen lang ist - wenn dieser bei der Prüfung passt, sollte
ggf gleich ein Hash mit der aktuellen PASSWORD() Funktion angelegt werden.

Gruß Marcel
Bitte warten ..
Mitglied: nxclass
16.12.2012 um 10:10 Uhr
suche im SQL nach PASSWORD() und ersetze es mit OLD_PASSWORD() - wenn dann die Anmeldung geht, kannst Du dir Gedanken machen wie Du in Zukunft deine Passwörter speicherst.
Bitte warten ..
Mitglied: Bommel1302
16.12.2012, aktualisiert um 21:54 Uhr
Hallo,

die anmeldung funktioniert wieder.
Habe die Querys angepasst und frage jetzt mit einem "or" nach PASSWORD() und OLD_PASSWORD().

Werde jetzt mich drum kümmern, das beim Ausloogen das Passwort im 41Byte Hash geschrieben wird.

Danke nochmal für eure Hilfe.


Gruß Marcel
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...