PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP5:Funktionen deaktivieren / mySQL: Anlegen von Datenbanken verhindern



derlym
19.08.07, 12:25
Hallo,

Auf meinem Webserver habe ich Funktionen wie shell_exec, ini_set, fpassthru und co. wegen der Sicherheit deaktiviert. Allerdings erfordern einige Scripts diese Funktionen. (phpMyAdmin: ini_set)
Da ich nun aber die Funktionen nicht Global-freischalten möchte, suche ich eine Möglichkeit, einzelne Funktionen für einen bestimmten vHost freizuschalten.

Eine Möglichkeit brachte zumindest theoretisch Erfolg:

<VirtualHost *>
ServerName ...
DocumentRoot ...
php_admin_value disable_functions shell_exec, exec, ...
php_ad...
</VirtualHost>

Dabei habe ich die benötigte Funktion nicht deaktiviert. In der PHPInfo wird die Funktion für "Local Value" auch nicht mehr als deaktiviert angezeigt, allerdings erhalte ich vom Script weiterhin die Meldung, dass die Funktion deaktiviert sei...

____
2. Problem:

Auf dem Webserver ist auch mySQL installiert. Das ganze ist so eingestellt, dass es einen User gibt, der alle Rechte auf die alle Datenbanken erhält, die folgendem Muster entsprechen:


db_<username>_<nummer>

Das Problem dabei:
Der User kann eigene Datenbanken anlegen, was aber nicht erwünscht ist, da die Datenbanken nur über ein Control Panel verwaltet werden sollen.

Wie kann ich dem User alle Rechte für ein normales Arbeiten mit seiner Datenbank geben, aber das erstellen und löschen von selbigen unterbinden?

fuffy
19.08.07, 14:26
Hi!


Das Problem dabei:
Der User kann eigene Datenbanken anlegen, was aber nicht erwünscht ist, da die Datenbanken nur über ein Control Panel verwaltet werden sollen.

Wie kann ich dem User alle Rechte für ein normales Arbeiten mit seiner Datenbank geben, aber das erstellen und löschen von selbigen unterbinden?
Gib ihm keine CREATE-Rechte für db_<username>_<nummer>, sondern explizit für die Datenbanken, die über das Control Panel angelegt wurden.

Gruß
fuffy

derlym
19.08.07, 14:47
Okay - das wäre eine Möglichkeit, aber gibt es nicht noch die Möglichkeit die Zugriffsrechte etwas allgemeiner zu definieren?

fuffy
19.08.07, 15:22
Okay - das wäre eine Möglichkeit, aber gibt es nicht noch die Möglichkeit die Zugriffsrechte etwas allgemeiner zu definieren?
MySQL unterscheidet nicht zwischen CREATE DATABASE und CREATE TABLE. Es gibt nur ein CREATE-Recht. Entziehst du das dem Anwender, kann er auch keine Tabellen mehr anlegen, die Datenbank wäre für ihn nutzlos.

Gruß
fuffy

BedriddenTech
19.08.07, 15:31
Okay - das wäre eine Möglichkeit, aber gibt es nicht noch die Möglichkeit die Zugriffsrechte etwas allgemeiner zu definieren?

Ja, die gibt es, und das MySQL-Handbuch liefert dazu auch viele Informationen. Sieht dir mal die Kapitel zur Nutzerverwaltung und die genauere Syntax von GRANT an.

derlym
19.08.07, 19:04
Im mySQL Manual wird zwar beschrieben, dass GRANT die Berechtigungen steuert, aber nicht, wie ich das Erstellen neuer Datenbanken durch den User verhindern kann.
Da es für das Control Panel kein besonders großer Aufwand ist, jeder Datenbank einzeln die Rechte zu geben, nehme ich diese Variante.

Damit bliebe noch das Problem der deaktivierten Funktionen.

drcux
20.08.07, 00:20
MySQL unterscheidet nicht zwischen CREATE DATABASE und CREATE TABLE. Es gibt nur ein CREATE-Recht. Entziehst du das dem Anwender, kann er auch keine Tabellen mehr anlegen, die Datenbank wäre für ihn nutzlos.


hm, das ist meiner Meinung nicht ganz richtig:
Natürlich kann ich einem User das Recht entziehen, Datenbanken anzulegen, indem ich ihm das "Globale Recht" CREATE entziehe, aber auf eine festgelegte Datenbank wieder das Recht CREATE erlaube.
Somit kann er auf der zugewiesenen Datenbank Tabellen erstellen, aber keine Datenbanken.

fuffy
20.08.07, 01:40
hm, das ist meiner Meinung nicht ganz richtig:
Natürlich kann ich einem User das Recht entziehen, Datenbanken anzulegen, indem ich ihm das "Globale Recht" CREATE entziehe, aber auf eine festgelegte Datenbank wieder das Recht CREATE erlaube.
Somit kann er auf der zugewiesenen Datenbank Tabellen erstellen, aber keine Datenbanken.
Das ist soweit richtig. Mein Vorschlag zielte auch genau in diese Richtung.
Der OP verwendete allerdings Platzhalter, weshalb das Recht auch für noch nicht existierende Datenbanken galt.

Gruß
fuffy