Mailinglisten-Archive |
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)
php::bar PHP Wiki - Listenarchive