Selbständiges Login mit MySQL

Der Zugang zu MySQL kann im einfachsten Fall mit den Logindaten über die Befehlszeile erfolgen:

 

mysql --password=secret --user=username database_name < query.sql

 

mit der Datei query.sql als SQL-Batchdatei.

 

Dieser Ansatz hat zwei Nachteile. Einersiets ist er nicht sicher, anderseits müssen bei vielen solchen in Scripte verpackte Aufrufe bei einer Änderung der Loginparamter überall Anpassungen vorgenommen werden. Eine bessere Möglichkeit ist die Anmeldeinformationen in einer eignen Datei zu kapseln.. At start up, all MySQL programs read from one or more global option files, and lastly from the file called .my.cnf in the user's home directory, if such file exists. Alle MySQL-Programme lesen aus einer oder mehreren globalen Optionen-Dateien, und abschliessend von £HOME/.my.cnf. Alle Dateien verwenden das gleiche von MySQL mit my.cnf vorgegebene Format, unterteilt in Abschnitte und deren Optionen. Alle gültigen Befehlszeilen-Argumente werden in diese Dateien verpackt. Um wie beim obigen Beispiel ein automatisches Login zu erreichen, sollte die nur für den jeweiligen Benutzer mit leserechten versehene Datei $HOME/-my.cnf wiefolgt aussehen:

 

# Read by client programs

[client]

user=username

password=secret

database=database_name

 

Damit kann ein Aufruf des SQL-Scripts beispielsweise aus crontab folgendermassen aussehen:

 

mysql < query.sql

 

Angaben in den Optionsdateien werden von den Argumenten der Komandozeile übersteuert.

 

Ein wesentlicher Vorteil bei der Verwendung von Optionendateien ist, dass es einfach ist, einen ad hoc MySQL-Client mit der DB zu verbinden. Ein Beispiel unter Zuhilfenahme des Moduls ConfigParser:

import  ConfigParser
config = ConfigParser.ConfigParser()
# read ~/.my.cnf if exists but do not raise error if not
config.read(['site.cfg', os.path.expanduser('~/.my.cnf')])
if config.has_section("client"):
  # read options for MySQL clients
  if config.has_option("client", "password"):
    # got default password
    pass = config.get("client", "password")

Nach Oben