Seite 1 von 1

Problem mit MySqldb

Verfasst: Montag 26. November 2007, 10:02
von pooner
Hallo Leute,

wahrscheinlich habe ich einen Denkfehler oder ähnliches, daher brauche ich eure Hilfe.

Ich habe eine Funktion die Parameter wie Username und Passwort übergeben bekommt. Mithilfe dieser Funktion soll dann eine Datenbank, ein Datenbankbenutzer und die entsprechenden Datenbankrechte vergeben werden. Das funktioniert soweit auch. möchte ich mich jedoch dann als DB-Benutzer einloggen geht es nicht. Nach Überprüfung durch root DB-User ist die Datenbank, der User angelegt und die Rechte sind gesetzt. Ich habe dann versucht das Passwort zu ändern, kann mich aber noch immer nicht auf der Konsole einloggen.

Code: Alles auswählen

#
def database(str_name):
#
 passwd='"' + get_pwd() + '"'
 print passwd
 print frm_line + " Datenbank-Konfiguration " + frm_line
 try:
  db=MySQLdb.connect(host="localhost",user="root",passwd="unkenntlich",)
  print "Datenbankverbindung hergestellt ...."
  db.query("""CREATE DATABASE `%s`""" % (str_name))
  print "Datenbank wurde angelegt"
  #  time.sleep(2)
  db.query("""CREATE USER `%s` IDENTIFIED BY %s""" % (str_name, passwd))
  print "Datenbankbenutzer wurde angelegt"
  db.query("""GRANT SELECT,INSERT,DROP,UPDATE,DELETE,CREATE,INDEX,ALTER,CREATE TEMPORARY TABLES,CREATE VIEW,SHOW VIEW,CREATE ROUTINE,ALTER ROUTINE,EXECUTE ON `%s`.* TO `%s`@'lo$
  print "Datenbankrechte wurden gesetzt"
  db.close()

 except MySQLdb.Error, e:
    print "Error %d: %s" % (e.args[0], e.args[1])
    sys.exit (1)
 print frm_line + " Datenbank-Konfiguration abgeschlossen " + frm_line


Irgendwelche Ideen ?

Danke für eure Hilfe

Nachtrag

Verfasst: Montag 26. November 2007, 16:07
von pooner
Okay, habe nun festgestellt das das Login nach Passwortänderung in der Datenbank und ein "FLUSH PRIVILIGES" jetzt klappt.

Das lässt mich vermuten das das Passwort nicht sauber übergeben wird. Kann mir da jamand weiter helfe? !

Verfasst: Montag 26. November 2007, 17:33
von Y0Gi
Bei `.execute()` sollte man die Parameter als Argument übergeben (und nicht per %-Operator vorher direkt in den SQL-String einfügen), ist das bei `.query()` nicht auch der Fall? Damit lassen sich jedenfalls Probleme durch fehlende Maskierung vermeiden.

Verfasst: Dienstag 27. November 2007, 08:25
von jens
siehe auch [wiki]Parametrisierte SQL-Queries[/wiki] :lol:

Verfasst: Dienstag 27. November 2007, 12:12
von pooner
Danke, muss ich mal probieren umzubauen. Gebe dann eine Rückmeldung

GELÖST

Verfasst: Mittwoch 28. November 2007, 08:55
von pooner
Mein Fehler war die Stringlänge des Passwortes. Die parametrisierte Lösung klappt jetzt auch THX