Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MySQL: DELETE command denied

Sivun loppuun

Danae [06.11.2007 13:35:09]

#

Koodailen vieraskirjaa, ja törmäsin ongelmaan, ettei ohjelmalla muka ole oikeuksia poistaa rivejä tietokannasta. PhpMyAdmin-hallintapaneelissa samaisella tunnuksella onnistuu poistaminen, mutta ohjelmassa tunnus suostuu suorittamaan vain komennot select, insert ja update.

Allaolevassa koodissa on poistettavat taulukkoon kerätty poistettavien rivien id-numerot. Ohjelman pitäisi poistaa rivit yksitellen tietokannasta ja ilmoittaa sitten poistojen onnistuneen. Id-numerot toimivat oikein.

<?php
for ($i = 0; $i < count($_POST["poistettavat"]); $i++) {
    $id = $_POST["poistettavat"][$i];
    $lause = "DELETE FROM kwikspell WHERE id = " . $id . ";";
    mysql_query($lause) or die(mysql_error());
}
print("Valitut viestit poistettu!");
?>

Koodi ei toimi, vaan ohjelma kaatuu ja antaa virheilmoituksen:
DELETE command denied to user 'vieraskirja'@'dyn3-235.adsl.mpynet.fi' for table 'kwikspell'

Onko ongelmani koodissa vai käyttäjän oikeuksissa? Käsin poistaminen siis onnistuu, ohjelmallisesti ei.

ajv [06.11.2007 13:56:26]

#

Danae kirjoitti:

Käsin poistaminen siis onnistuu, ohjelmallisesti ei.

Käytätkö tietokantaa "käsin" tuolla samaisella 'vieraskirja'-käyttäjällä? Oikeuksista tuo aika selkeesti kyllä johtuu.

Danae [06.11.2007 14:05:36]

#

Kyllä, käytän tietokantaa käsin tuolla vieraskirja-käyttäjällä ja pystyn poistamaan rivejä. Voisiko oikeuksissa silti olla jotain häikkää?

ajv [06.11.2007 14:12:02]

#

Saattaa olla, että puhun soopaa, mutta muistaakseni MySQL:ssä pystyi erikseen määrittelemään oikeuksia tuon domainin perusteella. Tällöin toimivuus "käsin" ja tuo virheilmoitus voisi viitata siihen, että DELETE-käskyt ovat sallittuja vain localhostista (sulla domain jostain syystä dyn3-235.adsl.mpynet.fi).

Danae [06.11.2007 14:36:28]

#

Tuota mietin itsekin, mutta luulen sallineeni oikeudet sekä localhostille että muille domaineille.

Et usko että koodissani olisi mitään vikaa? Pitää sitten tutkailla hallintapaneelia ja tuon käyttäjän oikeuksia. Kiitos vastauksistasi.

pistemies [06.11.2007 14:39:35]

#

Auttaisiko tällainen muutos:

 $lause = "DELETE FROM kwikspell WHERE id = '$id'";

Danae [06.11.2007 15:00:51]

#

Ei auta. Id:n tyyppi on integer. Kokeilin kyllä tuotakin, mutta oikeudet ei vieläkään riitä.

pistemies [06.11.2007 17:32:37]

#

vaihtoehto kaksi:

"DELETE FROM kwikspell WHERE id = '".$_POST["poistettavat"][$i]."'";

ajv [06.11.2007 19:51:37]

#

Pekka Mansikka kirjoitti:

vaihtoehto kaksi:

"DELETE FROM kwikspell WHERE id = '".$_POST["poistettavat"][$i]."'";

Eihän tässä nyt ole kyse tuon lauseen toimivuudesta, vaan tietokannan oikeuksista... Ja kuten Danae sanoi, kyseessä on numeerinen kenttä, joten ei mitään hipsuja!

Edit:
Tuossa, kuten alkuperäisessäkin koodissa on reikä SQL-injektiolle... Oma lomake, jonka yhden poistettavat-checkboksin arvoksi "5 OR 1=1". Tosin tämä taitaa olla admin toiminto, joten periaatessa jos luottaa itseensä sen verran, ettei joskun humalapäissään hakkeroi omaa vieraskirjaansa, niin menköön mun puolesta :)


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta