Autor | Zpráva | ||
---|---|---|---|
sysel Profil |
#1 · Zasláno: 16. 7. 2009, 01:44:41
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 |
#2 · Zasláno: 16. 7. 2009, 06:00:19
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 |
#3 · Zasláno: 16. 7. 2009, 07:38:43
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 |
#4 · Zasláno: 16. 7. 2009, 13:26:43
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 * |
#5 · Zasláno: 16. 7. 2009, 13:33:11 · Upravil/a: DoubleThink
„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ů. |
||
Časová prodleva: 15 let
|
0