MYSQL adatvisszatéritesi hiba
2009-08-30T21:58:02+02:00
2009-08-30T22:31:27+02:00
2022-08-13T10:40:32+02:00
TheJudge
Sziasztok.
Lenne egy elég furcsa problémám. Van egy MYSQL adatbázisunk és egy java szerver ahonnan meghívunk tárolt eljárásokat. A probléma ott kezdődik hogy régebben felvezettünk pár teszt felhasznalót, de most akárkivel regisztrálunk mindig csak az ahhoz a felhasználóhoz tartozó adatokat téríti vissza az egyik tárolt eljárás.
Az a furcsak, hogy ezeket az adatokat már töröltük.
A select ami rossz adatokat térít vissza az 1 userId szerint térít vissza kérdések nehézségi fokát, illetve ID-ját és figyelembe veszi a dátumot.
A tábla amibôl visszatérít ilyen szerkezetü:
userId, categoryId, lvl, date stb:)
ebbôl kellene az X (ahol X 1 szám) userId-jü elemnek a categoryId-jét és a lvl-t visszatéríteni.
Igy néz ki a tárolt eljárás:

DROP PROCEDURE `getcat`// CREATE DEFINER=`vki`@`%` PROCEDURE `getcat`( IN `uid` bigint, IN `curtime` datetime ) BEGIN select categoryId,lvl from `categories` where userId=uid and curtime<=date; END

Mysql-ben jót térít vissza, java-ban mikor meghíjuk akkor jön elô ez a furcsa probléma.
A definer nem tudjuk mire jó, mert 1 segéd programmal csatlakozunk az adatbázisra és az szurta be automatikusan ezt a tárolt eljárás elé...
Elôlre is kösz a válaszokat.
Mutasd a teljes hozzászólást!

  • A definer nem tudjuk mire jó


    Arra nem gondoltatok, hogy mondjuk az online mysql manual-t megnézzétek?

    The DEFINER and SQL SECURITY clauses specify the security context to be used when checking access privileges at routine execution time, as described later.

    ...

    The optional DEFINER clause specifies the MySQL account to be used when checking access privileges at routine execution time for routines that have the SQL SECURITY DEFINER characteristic. The DEFINER clause was added in MySQL 5.1.8.

    If a user value is given for the DEFINER clause, it should be a MySQL account in 'user_name'@'host_name' format (the same format used in the GRANT statement). The user_name and host_name values both are required. The definer can also be given as CURRENT_USER or CURRENT_USER(). The default DEFINER value is the user who executes the CREATE PROCEDURE or CREATE FUNCTION or statement. (This is the same as DEFINER = CURRENT_USER.)


    Szerintem pont itt van a kutya elásva. Továbbá valszeg valamilyen belső cache, aminek nincs köze a mysql-hez, is bejátszik. De ezt ennyiből nem lehet megmondani.
    Mutasd a teljes hozzászólást!
  • Ha újbólindítanám az adatbázis szervert az elég kellene legyen h kiürítse a cachet. Nem?
    Mutasd a teljes hozzászólást!
  • Mivel azt írtad, hogy mysql-ből jó a lekérdezés, csak alkalmazásból nem, ezért nem hinném. A definer-t egyébként nyugodtan kivehetitek.
    Mutasd a teljes hozzászólást!
  • Nem ez a hiba:(
    Mutasd a teljes hozzászólást!
  • Naná, hogy nem. Csak irritált az 1. hozzászólásomban idézett mondat rész.

    A hiba nem lehet az általad bemásolt kódban, hiszen azt írtad:
    Mysql-ben jót térít vissza, java-ban mikor meghíjuk akkor jön elő ez a furcsa probléma.
    Mutasd a teljes hozzászólást!
abcd