MySQL user anlegen und der Datenbank zuweisen... wie?

balufreak

balufreak

Aktives Mitglied
Thread Starter
Dabei seit
12.10.2003
Beiträge
1.563
Reaktionspunkte
28
Hallo leute!

Ich habe jetzt mal php und mysql auf meinem pb installiert und konfiguriert. Jetzt ist meine Frage, wie kann ich einen mySQL benutzer hinzufügen und ihn an einer Datenbank zuteilen?

greets balu
 
Das geht relativ einfach mit dem phpMyAdmin. Auf der Startseite gibt einen Bereich
"Rechte". Hier kannst Du Dich dann nach belieben austoben - achte aber darauf, dass
Du die bestehenden Benutzer nicht änderst, geschweige denn löschst!
 
geht es auch anderst, nicht über phpmyadmin??
 
Sicher kannst Du das auch über das Terminal machen. Dazu muss ich
aber leider passen. Schau Dich mal auf der MySQL Webseite um. Viel-
leicht wirst Du da fündig.
 
Die unten stehenden Beispiele zeigen, wie man den mysql-Client benutzt, um neue Benutzer
zu erzeugen. Die Beispiele setzen voraus, dass Berechtigungen mit den Vorgabewerten
eingerichtet wurden, die im vorherigen Abschnitt beschrieben wurden. Um also ¨Anderungen
machen zu k¨onnen, m¨ussen Sie sich von derselben Maschine aus verbinden, wo mysqld l¨auft,
und Sie m¨ussen sich als MySQL-root-Benutzer verbinden, und der root-Benutzer muss
die insert-Berechtigung f¨ur die mysql-Datenbank und die reload-Verwaltungsberechtigung
haben. Wenn Sie bereits das root-Benutzerpasswort ge¨andert haben, m¨ussen Sie es f¨ur die
unten stehenden mysql-Befehle eingeben.
Sie f¨ugen neue Benutzer mit GRANT-Statements hinzu:

shell> mysql --user=root mysql
mysql> GRANT ALL PRIVILEGES ON *.* TO monty@localhost
IDENTIFIED BY 'ein_passwort' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO monty@"%"
IDENTIFIED BY 'ein_passwort' WITH GRANT OPTION;
mysql> GRANT RELOAD,PROCESS ON *.* TO admin@localhost;
mysql> GRANT USAGE ON *.* TO dummy@localhost;

Diese GRANT-Statements richten drei neue Benutzer ein:
monty Einen echten Superuser, der sich von irgendwo her mit dem Server verbinden
kann, aber das Passwort 'ein_passwort' daf¨ur verwenden muss. Beachten
Sie, dass man GRANT-Statements sowohl f¨ur monty@localhost als auch f¨ur
monty@"%" verwenden muss. Wenn man keinen Eintrag mit localhost
hinzuf¨ugt, hat der Eintrag f¨ur den anonymen Benutzer f¨ur localhost Vorrang,
der durch mysql_install_db angelegt wird, wenn man sich vom lokalen Host
aus verbindet, weil dieser einen spezifischeren Host-Feldwert hat und daher
fr¨uher in der user-Tabellen-Sortierreihenfolge auftaucht.
admin Ein Benutzer, der sich ohne Passwort von localhost aus verbinden kann und
der die reload- und process- Verwaltungsberechtigungen hat. Das erlaubt dem
Benutzt, die mysqladmin reload-, mysqladmin refresh- und mysqladmin
flush-*-Befehle sowie mysqladmin processlist auszuf¨uhren. Es werden
keine Datenbank-bezogenen Berechtigungen gew¨ahrt. (Diese k¨onnen sp¨ater
gew¨ahrt werden, indem zus¨atzliche GRANT-Statements ausgef¨uhrt werden.)
dummy Ein Benutzer, der sich ohne Passwort verbinden kann, aber nur vom lokalen
Host aus. Die globalen Berechtigungen sind alle auf 'N' gesetzt - diese USAGE-
Berechtigung erlaubt Ihnen, einen Benutzer ohne Berechtigungen anzulegen.
Es wird angenommen, dass Sie sp¨ater Datenbank-spezifische Berechtigungen
gew¨ahren.
Sie k¨onnen dieselben Benutzerzugri®sinformationen direkt mittels INSERT-Statements
eingeben und dann den Server anweisen, die Berechtigungstabellen neu zu laden:

shell> mysql --user=root mysql
mysql> INSERT INTO user VALUES('localhost','monty',PASSWORD('ein_passwort'),
'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO user VALUES('%','monty',PASSWORD('ein_passwort'),
'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO user SET Host='localhost',User='admin',
Reload_priv='Y', Process_priv='Y';
mysql> INSERT INTO user (Host,User,Password)
VALUES('localhost','dummy','');
mysql> FLUSH PRIVILEGES;
Abh¨angig von Ihrer MySQL-Version m¨ussen Sie oben eventuell eine andere Anzahl von
'Y'-Werten eingeben (Versionen vor Version 3.22.11 hatten weniger Berechtigungsspalten).
Beim admin-Benutzer wird die besser lesbare INSERT-Syntax benutzt, die ab Version 3.22.11
verf¨ugbar ist.

Beachten Sie, dass Sie f¨ur die Einrichtung eines Superusers lediglich einen user-
Tabelleneintrag mit Berechtigungsfeldern einrichten m¨ussen, die auf 'Y' gesetzt sind. Es
sind keine db- oder host-Tabelleneintr¨age n¨otig.
The Berechtigungsspalten in der user-Tabelle wurden im letzten INSERT-Statement nicht
explizit gesetzt (f¨ur den Benutzer dummy), daher erhalten diese Spalten ihren Vorgabewert
von 'N'. Das ist dasselbe, was GRANT USAGE macht.
Das folgende Beispiel f¨ugt einen Benutzer custom hinzu, der sich von localhost,
server.domain und whitehouse.gov aus verbinden kann. Er will auf die bankkonto-
Datenbank nur von localhost aus zugreifen, auf die spesen-Datenbank nur von
whitehouse.gov aus und auf die kunde-Datenbank von allen drei Hosts aus. Er will von
allen drei Hosts aus das Passwort dumm benutzen.
Um die Berechtigungen dieses Benutzers mit GRANT-Statements einzurichten, geben Sie
folgende Befehle ein:
shell> mysql --user=root mysql
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON bankkonto.*
TO custom@localhost
IDENTIFIED BY 'dumm';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON spesen.*
TO custom@whitehouse.gov
IDENTIFIED BY 'dumm';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON kunde.*
TO custom@'%'
IDENTIFIED BY 'dumm';
Der Grund, warum wir Grant-Statements f¨ur den Benutzer ’custom’ eingeben, ist, dass wir
dem Benutzer Zugri® auf MySQL sowohl von der lokalen Maschine mit Unix-Sockets als
auch von der entfernten Maschine ’whitehouse.gov’ ¨uber TCP/IP geben wollen.
Um die Benutzerberechtigungen durch direkte ¨Anderungen an den Berechtigungstabellen
einzugeben, geben Sie folgende Befehle ein (beachten Sie das FLUSH PRIVILEGES am Ende):
shell> mysql --user=root mysql
mysql> INSERT INTO user (Host,User,Password)
VALUES('localhost','custom',PASSWORD('dumm'));
mysql> INSERT INTO user (Host,User,Password)
VALUES('server.domain','custom',PASSWORD('dumm'));
mysql> INSERT INTO user (Host,User,Password)
VALUES('whitehouse.gov','custom',PASSWORD('dumm'));
mysql> INSERT INTO db
(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
Create_priv,Drop_priv)
VALUES
('localhost','bankkonto','custom','Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO db
(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
Create_priv,Drop_priv)
VALUES
('whitehouse.gov','spesen','custom','Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO db
(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
Create_priv,Drop_priv)
VALUES('%','kunde','custom','Y','Y','Y','Y','Y','Y');
mysql> FLUSH PRIVILEGES;
Die ersten drei INSERT-Statements f¨ugen user-Tabelleneintr¨age hinzu, die dem Benutzer
custom erlauben, sich von den verschiedenen Hosts aus mit dem gegebenen Passwort zu
verbinden, gew¨ahren ihm aber keine Berechtigungen (alle Berechtigungen werden auf den
Vorgabewert 'N' gesetzt). Die n¨achsten drei INSERT-Statements f¨ugen db-Tabelleneintr¨age
hinzu, die custom Berechtigungen f¨ur die bankkonto-, spesen- und kunde-Datenbanken
gew¨ahren, aber nur, wenn auf sie von den korrekten Hosts aus zugegri®en wird. Wie immer,
wenn die Berechtigungstabellen direkt ver¨andert werden, muss dem Server gesagt werden,
dass er sie neu laden muss (mit FLUSH PRIVILEGES), damit die Berechtigungs¨anderungen
wirksam werden.
Wenn Sie einem bestimmten Benutzer Zugri® von irgendeiner Maschine in einer gegebenen
Dom¨ane geben wollen, k¨onnen Sie ein GRANT-Statement wie das folgende absetzen:
mysql> GRANT ...
ON *.*
TO benutzername@"%.domaene.de"
IDENTIFIED BY 'passwort';
Um dasselbe durch direkte ¨Anderung der Berechtigungstabellen einzugeben, machen Sie
folgendes:
mysql> INSERT INTO user VALUES ('%.domaene.de', 'benutzername',
PASSWORD('passwort'),...);
mysql> FLUSH PRIVILEGES;


Hi balufreak,

das steht danzu in der MYSQL-Dok, ich hoffe es hilft dir, wenngleich die Umlaute beim rauskopieren irgendwie verschittgegangen sind. Mit phpmyadmin ist es übersichtlicher ;-)

Salü,
mactrisha.
 
ja ich denke auch, dass es mit phpmyadmin leichter geht... nur habe ich auf der home seite kein link der 'rechte' heisst... darf ich denn die datenbanken nicht löschen, die mysql von sich aus erstellt?

greets balu
 
Original geschrieben von balufreak
ja ich denke auch, dass es mit phpmyadmin leichter geht... nur habe ich auf der home seite kein link der 'rechte' heisst... darf ich denn die datenbanken nicht löschen, die mysql von sich aus erstellt?
 

Die Datenbanken, die zu MySQL selber gehören, lässt Du am Besten
schön in Ruhe! Da sind unter anderem Rechte und noch ein paar an-
dere wichtige Informationen gespeichert.

Welche Version des phpMyAdmin hast Du denn - bzgl. Rechte?! Die
Bezeichnung und der Ort, an dem der Link liegt, ändert sich dummer-
weise auch von Version zu Version.

Und ... mit welchen Benutzer hast Du denn in der config.inc.php des
phpMyAdmin angegeben? Wenn es nicht root war, kann es sein, dass
Dein User nicht die Rechte hat, Rechte zu vergeben ... ähm ... naja, Du
verstehst schon! :rolleyes:
 
Warum immer so kompliziert? Normal willl man doch nur einen Benutzer anlegen mit gleichnamiger Datenbank und alle Rechte darauf gewähren... Und nun such ich schon 20 Minuten nach dem richtigen Befehl...

Also, nach dem man sich mit dem "mysql -pDEINPASSWORTFÜRROOT" eingeloggt hat:

CREATE USER 'MEINNEUERNUTZER'@'localhost' IDENTIFIED BY 'MEINPASSWORD';
GRANT USAGE ON * . * TO 'MEINNEUERNUTZER'@'localhost' IDENTIFIED BY 'MEINPASSWORD' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `MEINNEUERNUTZER` ;
GRANT ALL PRIVILEGES ON `MEINNEUERNUTZER` . * TO 'MEINNEUERNUTZER'@'localhost';


Der vorletzte "MEINNEUERNUTZER" sowie der drittletzte stehen für den Datenbanknamen.
Es sind insgesammt nur 4 Zeilen !!! Die Zweite wir hier im Forum leider mit einem Umbruch dargestellt !!!
 
Zuletzt bearbeitet:
Zurück
Oben Unten