MySQL-Datenbank read-only öffnen

MySQL-Datenbank read-only öffnen

am 09.10.2004 00:04:22 von Bernhard Berger

Hallo,

ich habe bei meinen Server-Anbieter einen MySQL-Datenbank-User mit
Schreibrechten.

In meiner Web-Anwendung soll der User direkt SQL-SELECT-Anweisungen
übergeben können. Es soll aber so nur ein lesender Zugriff möglich sein,
d.h. der User soll kein "DELETE" oder "UPDATE" etc. ausführen können. Einen
weiteren MySQL-User ohne Schreibrechte kann ich leider nicht so ohne
weiteres anlegen.

Gibt es eine Möglichkeit die Datenbank etwa über mysql_pconnect() o.ä. als
read-only mit nur Leserechten zu öffnen?

Falls nicht: Es müsste eigentlich IMHO für die Sicherheit reichen, wenn ich
überprüfe dass das übergebene SQL-Statement mit "SELECT" anfängt, und
keinen Strichpunkt enthält um evtl. andere SQL-Anweisungen dazu
einzuschleusen. Oder überseh ich da was gravierendes?
(Mal abgesehen davon dass Abfragen wie > FROM tabelle WHERE vorname = "sep;pl"> nicht möglich wären, aber das
> wär egal.)

Das Semikolon kannst du ruhig zulassen:

16.2. Wieso kann ich mehrere, durch Semikolon getrennte Statements nicht
ausführen?
http://www.dclp-faq.de/q/q-sql-statements.html

> (Und nein, leider kann ich nicht alle möglichen Optionen selber
> parsen und mich so um die Übergabe einer SQL-Anweisung vom Webuser
> vorbeiprogrammieren).

Das Sicherste ist natürlich, wenn der Anwender nicht die SQL-Query
selbst formuliert, sondern aus den zugelassenen Optionen
'zusammenklickt'.

MfG
Niels


--
Wenn Word für Längeres geeignet wäre, würde es nicht
Word, sondern Sentence, Page oder Article heißen.
[Matthias Mühlich de.comp.text.tex]

Re: MySQL-Datenbank read-only öffnen

am 09.10.2004 16:12:28 von Uli Honal

Bernhard Berger wrote:

> In meiner Web-Anwendung soll der User direkt SQL-SELECT-Anweisungen
> übergeben können. Es soll aber so nur ein lesender Zugriff m=C3=
=B6glich sein,
> d.h. der User soll kein "DELETE" oder "UPDATE" etc. ausführen k=C3=
=B6nnen.
> [..]
>=20
> Es müsste eigentlich IMHO für die Sicherheit reichen, wenn ic=
h
> überprüfe dass das übergebene SQL-Statement mit "SELECT"=
anfängt, und
> keinen Strichpunkt enthält um evtl. andere SQL-Anweisungen dazu
> einzuschleusen. Oder überseh ich da was gravierendes?

Vielleicht möchtest Du SELECT INTO ausschliessen. Ausserdem wür=
de ich=20
das MySQL Manual nochmal nach Funktionen durchsehen, die man Usern=20
verbieten möchte, z.B. BENCHMARK(). Generell besteht die Gefahr, das=
s=20
ein böser[tm] User Deinen DB-Server durch viel Last und Lockings in =

die Knie zwingt / für andere User unbenutzbar macht.

HTH,

-Uli.

Re: MySQL-Datenbank read-only öffnen

am 12.10.2004 21:42:27 von Bernhard Berger

ok danke für eure beiden Antworten, werde ich so einbauen.