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.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.
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