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, 4353 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 ..
Ähnliche Inhalte
Windows Server
Windows Server 2012 - Passwort ändern (6)

Frage von BirdyB zum Thema Windows Server ...

Batch & Shell
Script Lokales Admin Passwort ändern (3)

Frage von MaxBerg zum Thema Batch & Shell ...

Microsoft Office
Access Verknüpfte Tabellen Passwort ändern

Frage von mijacd zum Thema Microsoft Office ...

Batch & Shell
gelöst Registry per Batch abfragen und INI Einträge hinzufügen bzw. ändern (18)

Frage von kampen zum Thema Batch & Shell ...

Neue Wissensbeiträge
Google Android

Cyanogenmod alternative Downloadquelle

(2)

Tipp von Lochkartenstanzer zum Thema Google Android ...

Batch & Shell

Batch als Dienst bei Systemstart ohne Anmeldung ausführen

(5)

Tipp von tralveller zum Thema Batch & Shell ...

Sicherheits-Tools

Sicherheitstest von Passwörtern für ganze DB-Tabellen

(1)

Tipp von gdconsult zum Thema Sicherheits-Tools ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Statische Routen mit ISC-DHCP Server für Android Devices (22)

Frage von terminator zum Thema LAN, WAN, Wireless ...

Server
gelöst Wie erkennen, dass nur deutsche IPs Zugang zu einer Website haben? (22)

Frage von Coreknabe zum Thema Server ...

Exchange Server
gelöst Migration Exchange 2007 zu 2013 - Public Folder teilweise weg (16)

Frage von Andy1987 zum Thema Exchange Server ...

Outlook & Mail
Outlook 2010 mit Exchange 2016 (15)

Frage von slansky zum Thema Outlook & Mail ...