[PHP/MySql] Alleen select mogelijk?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig met een exporteer-scriptje, via een formulier word oa. een query naar het script gestuurd, wat vervolgens de query uitvoert en de resultaten in een csv bestand zet dat gedownload kan worden.

Werkt allemaal prima, geen probleem.... nu de vraag:
Is het mogelijk om de database read-only te openen? Ik wil nl. niet dat iemand een INSERT of DELETE query naar het script kan sturen. Ik kan natuurlijk ook via reguliere expressies de query gaan uitlezen, maar is er geen makkelijkere manier?

Acties:
  • 0 Henk 'm!

  • Y0ur1
  • Registratie: Oktober 2000
  • Niet online
Ja gewoon een mysql user aanmaken die alleen SELECT rechten heeft om een database, niet zo moeilijk toch?

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Lees dit eens door:
http://dev.mysql.com/doc/mysql/en/Privilege_system.html

Ik weet niet of dat tot je mogelijkheden behoort, want je moet dan wel rechten uit kunnen delen met je mysql user, maar het is wel goed om te weten hoe dat in elkaar steekt.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • GambitRS
  • Registratie: Juni 2001
  • Laatst online: 13-06-2013

GambitRS

w00t

elke login/password waarmee je op een mySQL database kan inloggen heeft zijn eigen bevoegdheden, dus kan je gemakkelijk een nieuwe login maken die alleen het recht heeft om select te gebruiken.

MechWarrior || Monsters Game


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ok, thanx voor de snelle reacties!
Ik begrijp dus dat het niet mogelijk is om in php rechten aan te passen voor de op dat moment lopende connectie...

Helaas kan ik wel users aanmaken voor de db, alleen geen rechten toekennen aan die users. Maar ik ga wel even bij m'n provider vragen of dat aangepast kan worden dan.

Acties:
  • 0 Henk 'm!

Verwijderd

als ik het goed begrijp komen al je queries uit een formulier? dan zou je die queries kunnen checken op statements die je niet wilt toestaan voordat je de query aan je script doorgeeft

Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Ik zou inderdaad als eerste eens vragen aan je hosting provider of je een MySQL user kunt krijgen met alleen SELECT rechten. Is dat niet mogelijk dan kan je natuurlijk altijd nog via PHP de query's kunnen checken op UPDATE en DELETE enzo. :)

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Een database-abstractie klasse is natuurlijk een oplossing. Middels een te setten variabele kun je dan elke binnenkomende query checken op INSERT/UPDATE keywords. Ik denk dat de overhead daarop te verwaarlozen is.

(In wezen hoef je alleen de eerste letter van je query string te checken..

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • RwD
  • Registratie: Oktober 2000
  • Niet online

RwD

kloonikoon

Na, de eerste letter is dan niet een goed idee, je weet niet hoe gebruikers hun query doen.
Ik doe meestal dit: " SELECT * FROM db WHERE 1 LIMIT 1 "
(Of met andere woorden, mn query strings opvullen met spaties)

Ik doe dit omdat ik al heel lang me ergerde aan kleine foutjes die ik maakte bij het in elkaar schroeven van een query waarbij ik dingen als "WHERE 1LIMIT 1" kreeg bij gebrek aan spaties. Ik heb geen idee of het slecht is dat ik het doe :P

Maar een eregi( '\s*SELECT', $var ) of trim( $var ) lost dat wel weer op dan :P

[ Voor 23% gewijzigd door RwD op 23-06-2004 12:44 ]


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Grijze Vos schreef op 23 juni 2004 @ 12:14:
Een database-abstractie klasse is natuurlijk een oplossing. Middels een te setten variabele kun je dan elke binnenkomende query checken op INSERT/UPDATE keywords. Ik denk dat de overhead daarop te verwaarlozen is.

(In wezen hoef je alleen de eerste letter van je query string te checken..
SELECT ... INTO?

En nee, dat MySQL die nu niet ondersteunt is geen argument, het is gewoon geen stabiele future-proof oplossing. Gewoon rechtensets gebruiken dus, daar zijn ze voor bedoeld.

Professionele website nodig?

Pagina: 1