Dieter: MySQL: User der andere User erstellen darf

Hallo,
ich möchte mit MySQL-User einen User anlegen, der das recht hat, einen anderen MySQL-User anzulegen, dazu eine Datenbank für ihn, und ihm dafür Rechte zu geben.
Ich möchte dies _nicht_ als Root machen, da dies ein PHP-Script erledigen soll.

Meine Frage ist jetzt, welche Rechte der User braucht.
Nur das globale Recht 'CREATE' und 'GRANT' reicht _nicht_.

Was für rechte braucht er also noch?
Ich möchte, dass der User nur das Minimum an Rechten erhält.

Grüße
Dieter

  1. Hi!

    ich möchte mit MySQL-User einen User anlegen, der das recht hat, einen anderen MySQL-User anzulegen, dazu eine Datenbank für ihn, und ihm dafür Rechte zu geben.
    Ich möchte dies _nicht_ als Root machen, da dies ein PHP-Script erledigen soll.

    Meine Frage ist jetzt, welche Rechte der User braucht.
    Nur das globale Recht 'CREATE' und 'GRANT' reicht _nicht_.

    Was für rechte braucht er also noch?
    Ich möchte, dass der User nur das Minimum an Rechten erhält.

    Um einem solchen MySQL-User alle Rechte zu geben, die er für deine Anforderungen braucht, ist folgender Query nötig (Beachte die grant option!):

      
    GRANT ALL ON *.* to user@localhost identified by 'password' with grant option;  
    
    

    Damit gewährst du dem User »user« alle Rechte, weißt ihm das Passwort 'password' zu und erlaubst ihm ferner, neue Benutzer anzulegen. Der springende Punkt dabei ist jedoch, dass dies nichts anderes als der Rootaccount ist, da eben für dein Vorhaben alle diese Rechte benötigt werden.

    Grüße,
    Fabian St.

  2. Hallo,
    also ich hab mich mal da etwas durchgefuchst, und eine Lösung gefunden.

    Für alle die es intressiert:
    Dieser User kann neue Accounts anlegen, und ihnen für Datenbanken Rechte vergeben.

    Ich beschreibe hier den Weg per phpMyAdmin:
    Schritt 1: User anlegen
    Wir legen einen neuen User an. Dieser braucht als globales Recht nur CREATE und RELOAD.

    CREATE um Datenbanken zu erstellen, und RELOAD für die Rechte.

    Schritt 2: Er darf neue User erstellen
    Hierfür muss unser User INSERT-Rechte für die Tabelle mysql =>user haben. Dies geht per 'Tabellenspezifische Rechte' bei phpMyAdmin.
    Bei den Felder wählen wir nur die Felder aus, die wir wirklich brauchen.

    Schritt 3: Er darf Rechte für andere User vergeben:
    Hierfür braucht der User INSERT-Rechte für die Tabelle mysql => db. Dabei wählen wir wieder nur die Felder aus, die wir wirklich brauchen.

    So das war es schon. Der User kann jetzt User & Datenbanken erstellen, und ihnen dafür (einmalig) Rechte zuweisen.

    Allerdings wenn wir mit dem User jetzt arbeiten, geht dies nur schwer mit phpMyAdmin.
    Bzw. immer wenn wir einen Eintrag in einer der Usertabellen erstellt haben, müssen wir: FLUSH PRIVILEGES;
    ausführen. Damit laden wir die Usertabellen neu (reload).

    Ein PHP-Script dafür kann z.B. so aussehen:

      
    <?php  
    //MySQL Verbindung  
    $username = "neuer_benutzername";  
    $pw = "das_passwort";  
      
    //DB erstellen  
    mysql_query("CREATE DATABASE `$username`") or die(mysql_error());  
      
      
    //MySQL-User erstellen  
    mysql_query("INSERT INTO `mysql`.`user` ( `Host` , `User` , `Password`)  
    VALUES (  
    'localhost', '$username', PASSWORD( '$pw' ) );");  
      
    //Rechte für die neue DB vergeben vergeben  
    mysql_query("INSERT INTO `mysql`.`db` ( `Host` , `Db` , `User` , `Select_priv` , `Insert_priv` , `Update_priv` , `Delete_priv` , `Create_priv` , `Drop_priv` , `Index_priv` , `Alter_priv` )  
    VALUES (  
    'localhost', '$username', '$username', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');");  
      
    //Benutzertabelle neu laden  
    mysql_query("FLUSH PRIVILEGES;");  
    ?>
    

    Grüße
    Dieter