Autor Zpráva
sysel
Profil
Narazil jsem na nepříjemnou potíž, nad to neočekávanou, musil jsem přepsat značnou část PHP kódu:

Vytvořil jsem webový prohlížeč dat v tabulce s předpokládanou autentizací, s tím, že user a pass se předává MySQL a ta podle toho omezuje přístup k vybraným položkám (sloupcům). Dokud jsem vše testoval samostatně bylo to bezva, ale když jsem konečně odladil prohlížení a spojil je s autentizací, vše se zhroutilo, protože méněprávný užiatel zhavaruje na
SELECT * FROM table

Naivně jsem doufal, že wildcard * vydá z tabulky všechny sloupce s oprávněním SELECT, ouha namísto toho mi to vynadalo, že se pokouším SELECTnout něco k čemu nejsem oprávněn. Připadám si jako trubka, protože jsem nusel připsat šťourání ve struktuře tabulky a pracně si zjišťovat, které sloupce smí daný užiavtel SELECTnout a samotný SELECT namísto * musí obsahovat kompletní výpis použitelných sloupců.

Pátral jsem po Internetu a zdá se mi, že svět MySQL uživatelů je rozpolcen, jedni toto chování považují za bug, jiní za feature. Já na to koukám jako puk a aniž bych se někam klonil, se mi to jeví jako pruda. Jen toho času, než se to obešlo v PHPku.

Víte někdo jak tohle funguje v jiných SQL databázích?
Mastodont
Profil
Ne. to není bug. Hvězdička znamená "všechny sloupce", nikoli "všechny sloupce, ke kterým mám přístup". AFAIK ve všech databázích. Mmch, hvězdičku považuji za přípustnou jen při přímém prohlížení dat v nějaké konzoli, v aplikaci to nemá co dělat.
Joker
Profil
sysel:
Připadám si jako trubka, protože jsem nusel připsat šťourání ve struktuře tabulky a pracně si zjišťovat, které sloupce smí daný užiavtel SELECTnout a samotný SELECT namísto * musí obsahovat kompletní výpis použitelných sloupců.
Samotný SELECT by hlavně měl obsahovat výpis jen těch sloupců, které jsou v dané chvíli potřeba.
Moc se mi nezdá, že by bylo vždycky nutné vybírat všechny sloupce, na které má daný uživatel oprávnění... nemluvě o těch, na které oprávnění nemá :-)
sysel
Profil
Inu patrně není možno jen tak něco předpokládat, na druhou stranu bych to viděl jako důležitou součást mauálů a turotials examplů na tuto skutečnost upozornit. Názory komunity nejsou tak jednoznačné, našel jsem i hlášení v Bug listu MySQL a diskuse tam byla celkem "vyvážená". (Ostatně prohlásit chybu za feature je celkem běžná metoda vývojářů, jak se vylhat z průšvihu ;-) )

Když si dovolím (nepatřičný) intuitivní analogon, tak v přístupu do adresářů má zrušení práva "read" za následek to, že soubor zmizí ze seznamu. Jo jo, vím, že to kulhá, ale nač by tedy žolíky vůbec byly. Ostatně v příkladech se oběvuje celkem běžně např.: ... count(*) ...

Vymýšlet si příklady pro důvod, aby si přál uživatel zobrazit všechny sloupce, nemusím. Prostě to má v popisu práce a omezení přístupu by mohlo engine na prohlížení výrazně zjednodušit. Kupř. tabulku zaměstněnců využívají různá oddělení, ale někoho zajímá jenom adresa a, řekněme, plat, jiného osobní číslo, inventář, a podnikové telefonní číslo.

No když už jeden zná omezené možnosti nástrjů, tak se dokáže zařídit.
DoubleThink
Profil *
Mmch, hvězdičku považuji za přípustnou jen při přímém prohlížení dat v nějaké konzoli, v aplikaci to nemá co dělat.
Předpokládejme na chvíli, jen z legrace, že bych potřeboval data ze skoro všech sloupců. Mám je jak trotl všechny psát do query? Nesmysl, pokud není úspora dat v řádech megabajtů.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0