Installations-Script

radarin

Angesehenes Mitglied
Hallo Liste

Ich bin daran mir ein Script zu erstellen, welche es ermöglicht, aus einem beliebigen Verzeichnis auf dem WebServer Änderungen an der Datenbank zu erstellen.

Im Wesentlichen soll der User neue Tabellen anlegen können und deren Namen frei bestimmen, ggf. auch die Spalten frei erstellen. Ich denke bei bestehender DB kriege ich das hin.

CODE
$database = mysql_connect($dbhost, $dbuser, $dbpasswd);
mysql_select_db($dbname, $database);



Diese beiden Zeilen benötige ich um eine bestehende Datenbank vom Server anzusprechen. Wie aber muss ich die Verbindung definieren, wenn ich nur den SQL-Server connecten will und eine DB zu erstellen?

In PHPmyAdmin muss ich danach auch noch die Rechte vergeben, also angeben, welcher User welche DB. Macht es somit überhaupt sinn dem User diese Möglichkeit anzubieten, oder ist es besser zu sagen, lieber User mach es wie Du willst, aber die DB muss existieren bevor du mit meinem Script weiterarbeitest..?

Die rudimentärste Lösung wäre natürlich die Stuktur zu exportieren damit der User mit einem fremden Toll diese wieder importieren kann, aber das will ich nicht undedingt so lösen...

Gruss aus St.Gallen, René
 
QUOTE (radarin @ Sa 28.1.2006, 13:18)[...] Möglichkeit anzubieten, oder ist es besser zu sagen, lieber User mach es wie Du willst, aber die DB muss existieren bevor du mit meinem Script weiterarbeitest..? [...]

Meistens haben die einzelnen Benutzer nicht die Rechte eine Datenbank anzulegen, von daher würde ich das optional laufen lassen, wenn es geht, ist ok, ansonsten musst der Benutzer eine existierende Datenbank angeben.
Den Namen der Datenbank sollte sich aber der Benutzer schon aussuchen können, nicht das Du mit Deinen Script eine existierende Datenbank inklusive Daten einfach löschst.



MfG Sascha Ahlers
 
Das ist schon klar. Mir ist es egal wie die DB heisst, oder die Tabellen. Bei letzteren werde ich die Namen schon fest vorgeben, jedoch mit einem frei definierbaren Prefix. Die Namen dafür werden in der Configdatei in Variablen gepackt. Die meisten User haben ja eine DB und packen dann dort alles rein was sie haben. Trotzdem will ich versuchen, auch die Möglichkeit anzubieten um die DB zu erstellen. Oder ist das der Rechte wegen zu kompliziert?
 
Hallo Radarin,

mysql_query("CREATE DATABASE `dbname`",$connection);

Hier wäre noch ein Datenbankprefix möglich, doch wenn User Datenbanken mit demselben Prefix erstellen, kann man sich den auch sparen.
Das siehst du aber auch alles im phpmyadmin.
Auch die Befehle um neue Datenbankuser mit spezifischen Zugiriffsrechten zu erstellen.

Nach Erstellen eines neuen Users

mysql_query('GRANT SELECT , UPDATE , INSERT , DELETE, SELECT ON `dbname` . * TO "'.$user.'"@"'.$host.'";',$connection);

hat mysql mit der Zuordnung des Passworts bei mir Schwierigkeiten. Es sind zwar alle Rechte und das Passwort richtig gesetzt, aber manchmal irgendwie nicht initialisiert.(?)

mysql_query('SET PASSWORD FOR "'.$user.'"@"'.$host.'" = PASSWORD( "'.$userpasswort.'" ) ',$connection);

Da hilft dann nur die erneute manuelle Eingabe des pw über phpmyadmin.

Für mich macht es ansonsten nicht viel Sinn, Usern zu erlauben ständig neue Datenbanken zu erstellen,
es sei denn es ist wirklich ein Installationscript, das nur einmal
biggrin.gif
benutzt wird, um eine Applikation zum Laufen zu bringen.

(user bedeutet mysql-user-account)
Du müsstest für den eingeschränkten Zugriff auf die userspezifische Datenbank jedesmal zuerst die Mysql-Systemrechtetabelle öffnen, um die Rechte des Users abzurufen, bevor der User die Datenbank öffnen darf, was jedesmal 2 Verbindungen benötigt oder ein Hauptuser prüft in einer Usertabelle, ob der User auf eine Datenbank zugreifen darf oder nicht und die Verbindung bleibt beim Hauptuser. Aber dann brauchst du auch keine Extrauser mit Extrarechten in mysql zu erstellen. Alles unnötig kompliziert.

Neue von Usern generierte Tabellen sollte man denke ich in einer bestehenden Datenbank zuordnen.
Um sie zu trennen, könnten die Tabellennamen mit der userid beginnen:
mysql_query("select * from `'.$_SESSION[id].'Tabellenname`...

Gruss

Tümmel
 
Danke für Eure Antworten. Ich denke ich verzichte darauf Datenbanken zu erstellen. Das kostet mich echt zu viel Zeit das zum Laufen zu bringen. Hab gerade in PHPmyAdmin gemerkt wie sensibel es ist nur einen neuen User für bestimmte DB's zu erstellen.

Ich setze einfach voraus, dass der User von seinem Provider eine DB mit Zugangsberechtigung hat, resp. sich selber behelfen kann, und beschränke mich in meinem Script nur noch mit dem Einrichten der Tabellen.
 
Wenn es sich um ein Installationsscript handelt, dass auf einem anderen Hoster läuft, bringt es schon was die eine Datenbank zu erstellen. Zum Installieren soll der dann das root-user-account auf dem localhost benutzen. Das wird meistens so gemacht.

Du kannst eine Form schreiben in der der Host und ein Superuser mit globalen Rechten und Grants eingeben werden soll mit dem die Datenbank generiert wird und die Daten dann an das Installationsscript übergeben.

Spezifische Rechte zuweisen kann der dann später bei Bedarf immer noch.

btw. Ich hatte bei obigem Post den Titel von dem thread gar nicht mehr im Kopf.
cool.gif


Gruss

Tümmel
 
Ich hab mir andere Installationsvorgänge genauer angesehen, und die setzen alle eine vorhandene Datenbank voraus. Und so werde ich es auch halten, alles Andere ist zu kompliziert.

Diesbezüglich werden Script und Configdatei so ausgelegt, dass der User vor die Tabellen ein Prefix wählen kamm, um Konflikte mit anderen Applikationen zu vermeiden, oder wenn die selbe Applikation mehrfach benutzt werden will.

Danke für Eure Tips.
 
Zurück
Oben