phpbar.de logo

Mailinglisten-Archive

Re: [php] MySQL access
Archiv Mailingliste php_(at)_infosoc.uni-koeln.de

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [php] MySQL access




Thomas Adamek wrote:
> INSERT INTO user VALUES
> ('localhost','benutzername',PASSWORD('geheim'),'Y','Y','Y','Y','Y','Y','
> Y','Y','Y','Y','Y','Y','Y');

_Dies_ legt einen Benutzer in MySQL an und gibt diesem Benutzer Zugriffsrechte.
Diese Zugriffsrechte sind unabhängig von der Datenbank, auf die sich der
Benutzer connected, sie hängen am User, nicht an der DB.

Mit dem Kommando da oben legst Du also einen Benutzer an, der alle Zugriffsrechte
hat, unabhängig von der gewählten logischen Datenbank. Du erzeugst also einen
Datenbank-Administrator. Das ist normalerweise nicht die Intention.


Stattdessen erzeugt man gewöhnlich in MySQL einen Benutzer, indem man diesen
Benutzer OHNE jegliche inhärente Rechte erzeugt:

INSERT INTO user (host, user, password)
          VALUES ('fromhost', 'username', PASSWORD('gemein'));

Dieser User ist nun ein Nichts & Niemand. Er kann nix und darf auch nix. Ihm
können jetzt für eine Datenbank einzelne, spezifische Rechte erteilt werden.
In MySQL 3.22 sind dies die 6 Rechte select_priv, insert_priv, update_priv,
delete_priv, create_priv, drop_priv, die die gleichnamigen SQL-Befehle 
freischalten.

Man macht also

INSERT INTO db ( host, db, user, 
                 select_priv, 
                 insert_priv, update_priv, delete_priv,
                 create_priv, drop_priv)
        VALUES ( '%', 'database', 'username', 
                 'y',
                 'y', 'y', 'y',
                 'y', 'y');

Dabei sollte man folgende Dinge beachten: 

MySQL-Benutzer haben keinen Zusammenhang mit UNIX- oder NT-Benutzern,
außer daß PHP sinnvolle Defaults dafür annimmt, wenn man beim Connect
nix angibt (was man gewöhnlich aber tut).

MySQL-Benutzer haben immer die Form (username, fromhost), sodaß man 
niemals einen Benutzer, sondern immer einen Benutzer von einem Rechner
freischaltet. MySQL versteht hier SQL-Wildcards.

MySQL-Benutzer gibt es in 3 grundsätzlich sinnvollen Berechtigungsstufen:

- Rein lesender Zugriff -> Nur select_priv geben.
  Dies ist sinnvoll bei rein lesenden Anwendungen, z.B. ein Spamgenerator,
  der sich die Adreßspalte einer Kundentabelle aus der Datenbank liest.
- Lesender und ändernder Zugriff -> select, insert, update, delete
  geben.
  Dies ist sinnvoll für alle normalen Webanwendungen, die auf eine Datenbank
  editierend zugreifen (z.B. für das Admin-Interface zu der o.a. 
  Werbemüllschleuder)
- Strukturverändernder Zugriff (die o.a. 4 Rechte + create + drop)
  Dies ist oftmals nur zur Installation notwendig, damit die benötigten
  Tables erzeugt und gelöscht werden können. Die meisten Anwendungen
  brauchen diese Rechte nicht.


Damit MySQL die geänderten Zugriffsrechte zur Kenntnis nimmt, muß auf der 
Kommandozeile "mysqladmin reload" gefahren werden.

Zugleich sollte für die DB per Cron auch ein Backup scheduled werden:

"mysqldump -c -u username -p password datenbank | gzip -9 > datenbank.sql.gz"

Und diese Datei muß dann auf Band wandern.

Kristian

-- 
Kristian Köhntopp, NetUSE Kommunikationstechnologie GmbH
Siemenswall, D-24107 Kiel, Germany, +49 431 386 436 00
Using PHP3? See our web development library at
http://phplib.shonline.de/ (GPL)

Home | Main Index | Thread Index

php::bar PHP Wiki   -   Listenarchive