eigenes Webhosting. Wollen eigene Datenbak erstellung verhindern, nur wie?

Dr Dau hat gesagt.:
Zuerst die Datenbank erstellen, denn wie willst Du einen User einer Datenbank zuordnen, wenn diese noch garnicht existiert?! ;)
Dann den User anlegen, denn wo kein User, da auch keine Rechte. ;)
Und dann erst die Rechte vergeben.
Du kannst Rechte für eine nicht existierende Datenbank vergeben. Rechte werden auch nicht entzogen, wenn die Datenbank gelöscht wird. So steht es zumindest in der Doku. Eine nicht existierende Datenbank, für die ein User Rechte hat, könnte er sich selbst anlegen.
Wenn Du Rechte vergibst wird der User automatisch angelegt.

Ich habe jetzt auch mal mit Debian getestet (MySQL 4.1.11-Debian_4sarge2-log).

MySQL frisch installiert:
Code:
antigua:~# apt-get install mysql-server-4.1

...

Richte mysql-server-4.1 ein (4.1.11a-4sarge2) ...
Stopping MySQL database server: mysqld.
Starting MySQL database server: mysqld.
Checking for crashed MySQL tables in the background.

Login als root:
Code:
antigua:~# mysql --host=localhost --user=root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5 to server version: 4.1.11-Debian_4sarge2-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> grant SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,ALTER ON test01.*
    -> to 'user'@'localhost'
    -> identified by 'pass';
Query OK, 0 rows affected (0.01 sec)

mysql> exit;
Bye

Login als user:
Code:
antigua:~# mysql --host=localhost --user=user --password=pass
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7 to server version: 4.1.11-Debian_4sarge2-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> create database `test01`;
Query OK, 1 row affected (0.03 sec)

mysql> create database `test02`;
ERROR 1044 (42000): Access denied for user 'user'@'localhost' to database 'test02'

mysql> use test01;
Database changed

mysql> create table test (id int(11) auto_increment primary key, t char(255));
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test set t='a text';
Query OK, 1 row affected (0.00 sec)

mysql> select * from test;
+----+--------+
| id | t      |
+----+--------+
|  1 | a text |
+----+--------+
1 row in set (0.00 sec)

mysql> exit;
Bye

Wieder als root:
Code:
antigua:~# mysql --host=localhost --user=root   
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8 to server version: 4.1.11-Debian_4sarge2-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> create database `test02`;
Query OK, 1 row affected (0.00 sec)

mysql> use `test02`;
Database changed
mysql> create table test_on_02 (id int(11) auto_increment primary key, i int(11));
Query OK, 0 rows affected (0.01 sec)

mysql> insert into test_on_02 set i=12;
Query OK, 1 row affected (0.00 sec)

mysql> select * from test_on_02;
+----+------+
| id | i    |
+----+------+
|  1 |   12 |
+----+------+
1 row in set (0.00 sec)

mysql> exit;
Bye

Und wieder als user:
Code:
antigua:~# mysql --host=localhost --user=user --password=pass
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9 to server version: 4.1.11-Debian_4sarge2-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> show databases;
+----------+
| Database |
+----------+
| test01   |
+----------+
1 row in set (0.00 sec)

mysql> select * from test02.test_on_02;
ERROR 1044 (42000): Access denied for user 'user'@'localhost' to database 'test02'

mysql> use test02;
ERROR 1044 (42000): Access denied for user 'user'@'localhost' to database 'test02'

mysql> exit;
Bye

Mit einem frisch installierten MySQL-Server auf Debian funktioniert es also wie gewünscht und erwartet. Du hast möglicherweise bereits vorher schon etwas kaputt konfiguriert. Vielleicht solltest Du zunächst mit einem Tool, wie z.B. phpMyAdmin, sämtliche User (außer root) löschen, sowie alle Rechte und dann mit der Rechte-Vergabe noch mal von vorne anfangen.

Gruß hpvw
 
Jau danke :) echt cool deie arbeit;)


Allerdings erkenne ich hier das der User die Datenbank selber anlegen musste.
Wollten das aber das die datenbank vorher schon erstellt wurde und der user dan nin diese zugewiesen wird.

Ist doch eigendlich das gleiche nur das man erst datenbak erstellt, dann den suer und dann die rechte vergebenoder?


hast Linux oder?
 
Zuletzt bearbeitet:
hpvw hat gesagt.:
Du kannst Rechte für eine nicht existierende Datenbank vergeben.
Klingt für mich irgendwie unlogisch.
Denn wozu sollte man einen User anlegen und diesem auch Rechte vergeben, wenn die Datenbank nicht existiert?!
Aber wenn es so in der Doku steht, wird es schon stimmen..... und irgend etwas werden sich die Entwickler dabei schon gedacht haben.
hpvw hat gesagt.:
Eine nicht existierende Datenbank, für die ein User Rechte hat, könnte er sich selbst anlegen.
Hmm, wenn ich es mir recht überlege, könnte es doch wieder logisch klingen.
Als Beispiel könnte ich mir hierbei Hoster vorstellen, bei denen man mehr als nur eine Datenbank bekommt.
Wird aber sicherlich auch von Hoster zu Hoster unterschiedlich gehandhabt.

Über phpMyAdmin könnte er auch dem/den User/Usern die globalen Rechte entziehen und nur datenbankspezifische Rechte vergeben (ausser "root" natürlich).
Denn User löschen und neu anlegen, könnte evtl. viel Arbeit machen.
Z.b. wenn es viele User gibt und er deren Passwörter nicht kennt, dann müsste er für jeden User ein neues Passwort anlegen und dieses jedem User mitteilen.
Oder sollte es etwa möglich sein die Passwörter zu entschlüsseln?!
 
Tobbes hat gesagt.:
Allerdings erkenne ich hier das der User die Datenbank selber anlegen musste.
Er musste nicht. Auf Dr Daus Einwand hin, habe ich die Hinweise aus der Doku mal getestet:
Doku hat gesagt.:
MySQL allows you to grant privileges even on databases and tables that do not exist. In such cases, the privileges to be granted must include the CREATE privilege. This behavior is by design, and is intended to enable the database administrator to prepare user accounts and privileges for databases and tables that are to be created at a later time.

Important: MySQL does not automatically revoke any privileges when you drop a table or database

Tobbes hat gesagt.:
Wollten das aber das die datenbank vorher schon erstellt wurde und der user dan nin diese zugewiesen wird.
Du kannst die Datenbank auch als root erstellen. Dabei spielt es keine Rolle, ob Du das vor oder nach der Rechte-Vergabe für den Users machst.

Tobbes hat gesagt.:
Ist doch eigendlich das gleiche nur das man erst datenbak erstellt, dann den suer und dann die rechte vergebenoder?
Du musst (vielleicht auch "darfst") den User nicht anlegen. Er wird mit dem GRANT für die Datenbank automatisch angelegt. Die Reihenfolge von Rechte-Vergabe und Datenbank anlegen ist egal.

Tobbes hat gesagt.:
Den Test von oben habe ich mit Debian gemacht, aber ansonsten arbeite ich nur mit Windows. Der Linux-Rechner steht hier nur zum üben und testen in der Ecke.

Gruß hpvw
 
also dürft der php code ungefähr so aussehen?

PHP:
mysql_connect("localhost", "root", "rootpasswort");

$mysql_set_stamp="CREATA database 'DATENBANK'
$result = mysql_query($mysql_set_stamp);
$mysql_set_stamp2="grant SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,ALTER ON DATENBANKNAME.* to 'user'@'localhost' identified by 'passwort';
 
ich mache folgenes:
ich lasse erst die rechte setzen, logge mich dann als user ein und erstelle dann die Datenbank. Trotzdem hat der User Rechte, eigene Datenbanken zu erstellen
 
Im Prinzip ja, aber ich korrigiere mal ein paar Syntaxfehler:
PHP:
mysql_connect("localhost", "root", "rootpasswort");

$mysql_set_stamp="CREATE database `DATENBANK`";
$result = mysql_query($mysql_set_stamp);
$mysql_set_stamp2="grant SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,ALTER ON DATENBANK.* to 'user'@'localhost' identified by 'passwort'";
$result = mysql_query($mysql_set_stamp2);
Beachte bitte die Backticks um DATENBANK.

Gruß hpvw

EDIT: Hast Du denn auch schon allen Usern außer root die Rechte entzogen und die User dann gelöscht?
 
im Prinzip?xD

und der code funkt auch im debian?Also im windows klappt der aber auf debian wohl nicht,oder?
hm.. am ende meiner ideen^^
 
Dr Dau hat gesagt.:
Mit Deinem Code veränderst/entziehst Du nicht die Rechte.


will ich auch garnicht, ka wie er da draufkommt ;)

Der user will eine Datenbank, klickt ein link zum aktivieren an---->Es wird eine DB angelegt, der user wird angelegt und bekommt Datanebankspezifische rechte(so das er keienr weitere DB erstellen kann)


Nur wie genau der code aussehen soll in php.......
 

Neue Beiträge

Zurück