Benutzer anlegen

Dieses Forum enthält Diskussionen zu Bugs in ConPresso 4 und deren Lösungen.
Antworten
Benutzeravatar
balu
ConPresso-Entwickler
Beiträge: 1748
Registriert: 01.01.1970 01:00
Hat sich bedankt: 81 Mal
Danksagung erhalten: 133 Mal

Benutzer anlegen

Beitrag von balu »

Hi,

eigentlich wollten wir Euch dieses Wochenende mit der Version 4.0.2 beliefern. Aber erstens kommt es anders und zweitens als man denkt. Nachdem wir jetzt den zweiten Hinweis auf dieses Problem bekommen haben, konnten wir gezielter suchen und haben die Ursache gefunden:

Problem:
Benutzer in ConPresso koennen aus technischen Gruenden (Verknuepfungen in der Datenbank, usw.) nicht mehr geloescht werden, sondern werden nur noch "deaktiviert". Hierzu wird die ID des Benutzers ins negative umgewandelt.

Wenn jetzt jemand einen neuen Benutzer anlegt, bekommt dieser die maximal moegliche Integer-Zahl in MySQL als ID zugewiesen (2147483647).

Beim naechsten Benutzer wird versucht, diese ID zu erhoehen. Dieses schlaegt natuerlich fehl und wird mit folgender MySQL-Fehlermeldung quittiert:

Code: Alles auswählen

Database error:
Invalid SQL: INSERT INTO cpo4_user (user, name, initial, email, language, admin, usergroups_id, passwd) VALUES ('X', 'X', 'X', 'X', 'X', 'X', '', 'X')
Duplicate entry '2147483647' for key 1 (1062)
Ursache:
Meiner Meinung nach handelt es sich um ein Problem mit "aelteren" MySQL-Versionen, welches auch mal im Handbuch gestanden zu haben scheint:
MySQL Version 3.23 will also only work properly if the AUTO_INCREMENT column only has positive values. Inserting a negative number is regarded as inserting a very large positive number. This is done to avoid precision problems when numbers 'wrap' over from positive to negative and also to ensure that one doesn't accidentally get an AUTO_INCREMENT column that contains 0.
Lösung:
Kurzfristig: Benutzer nicht deaktivieren. Um zu verhindern, dass sich der Benutzer einloggt, kann man sein Passwort und die Mailadresse aendern.

Längerfristig: Auf das naechste Update warten. Wir koennen uns in diesem Fall leider wohl nicht auf das auto_increment von MySQL verlassen, sondern muessen die Werte manuell setzen...

Sollte es schon einen Benutzer mit der ID 2147483647 geben, so kann man diesen Benutzer mit SQL-Befehlen auf einen korrekten Wert setzen (ungetestet):

XXX = neue ID des benutzers (groesster Wert in cpo_user plus 1)

Code: Alles auswählen

UPDATE cpo4_user SET id=XXX WHERE id=2147483647;
UPDATE cpo4_snippet SET user_id=XXX WHERE user_id=2147483647;
UPDATE cpo4_permission SET user_id=XXX WHERE user_id=2147483647;
UPDATE cpo4_news SET released_user_id=XXX WHERE released_user_id=2147483647;
UPDATE cpo4_log_login SET user_id=XXX WHERE user_id=2147483647;        
UPDATE cpo4_data SET user_id=XXX WHERE user_id=2147483647;
ALTER TABLE cpo4_user AUTO_INCREMENT=XXX+1
Wir arbeiten an dem Problem...

Balu
Ralf
ConPresso-Checker
Beiträge: 205
Registriert: 25.08.2005 10:58
Hat sich bedankt: 65 Mal
Danksagung erhalten: 14 Mal

Beitrag von Ralf »

Hallo Balu,

wollte nur mal kurz nachfragen ob dieses Problem in der "neuen" Version 4.0.2 jetzt schon behoben wurde oder nicht?!

Vielen Dank
cu Ralf
Benutzeravatar
balu
ConPresso-Entwickler
Beiträge: 1748
Registriert: 01.01.1970 01:00
Hat sich bedankt: 81 Mal
Danksagung erhalten: 133 Mal

Beitrag von balu »

Ja, das sollte in Version 4.0.2 behoben sein.

Balu
Antworten