Re: Oracle JDBC - chyba ORA-00911: invalid character
A navic prepared statementy jsou na rade DB strojich i rychlejsi. 2013/1/20 Jiří Chaloupka : > Pak se JAAS zatěžovat nemusíte, ale stále platí to co psal kolega před > chvílí přede mnou, lépe když to Vám přejde do krve ... > > Jirka > > Dne 20. ledna 2013 13:16 Dušan Rychnovský > napsal(a): > >> Ten objekt pro vzdaleny pristup nikde vystaveny neni, aplikace je >> standalone (nebezi v aplikacnim serveru). >> >> Dusan >> >> >> Dne 20. ledna 2013 13:09 Ladislav Thon napsal(a): >> >>> dekuji za upozorneni na SQL injection. V tomto pripade se jedna o interni query, kdy uzivatel nema moznost parametr mid primo ovlivnit. Proto jsem pro jednoduchost zvolil prostou konkatenaci stringu. >>> >>> >>> Pokud jde o jednoduchost, tak naprosto nejjednodušší přístup je vždycky >>> používat parametry a nikdy neskládat dotaz ze stringů. Za to by měl být ve >>> slušné firmě okamžitě vyhazov. >>> >>> LT >>> >>> P.S.: SQL je zlo. Rozumné databázové API by nic takového jako SQL >>> injection z principu neumožňovalo. >> >> > -- Ondra Medek
Re: Oracle JDBC - chyba ORA-00911: invalid character
Pak se JAAS zatěžovat nemusíte, ale stále platí to co psal kolega před chvílí přede mnou, lépe když to Vám přejde do krve ... Jirka Dne 20. ledna 2013 13:16 Dušan Rychnovský napsal(a): > Ten objekt pro vzdaleny pristup nikde vystaveny neni, aplikace je > standalone (nebezi v aplikacnim serveru). > > Dusan > > > Dne 20. ledna 2013 13:09 Ladislav Thon napsal(a): > > >> dekuji za upozorneni na SQL injection. V tomto pripade se jedna o interni >>> query, kdy uzivatel nema moznost parametr mid primo ovlivnit. Proto jsem >>> pro jednoduchost zvolil prostou konkatenaci stringu. >>> >> >> Pokud jde o jednoduchost, tak naprosto nejjednodušší přístup je *vždycky* >> používat >> parametry a *nikdy* neskládat dotaz ze stringů. Za to by měl být ve >> slušné firmě okamžitě vyhazov. >> >> LT >> >> P.S.: SQL je zlo. Rozumné databázové API by nic takového jako SQL >> injection z principu neumožňovalo. >> > >
Re: Oracle JDBC - chyba ORA-00911: invalid character
Ten objekt pro vzdaleny pristup nikde vystaveny neni, aplikace je standalone (nebezi v aplikacnim serveru). Dusan Dne 20. ledna 2013 13:09 Ladislav Thon napsal(a): > > dekuji za upozorneni na SQL injection. V tomto pripade se jedna o interni >> query, kdy uzivatel nema moznost parametr mid primo ovlivnit. Proto jsem >> pro jednoduchost zvolil prostou konkatenaci stringu. >> > > Pokud jde o jednoduchost, tak naprosto nejjednodušší přístup je *vždycky* > používat > parametry a *nikdy* neskládat dotaz ze stringů. Za to by měl být ve > slušné firmě okamžitě vyhazov. > > LT > > P.S.: SQL je zlo. Rozumné databázové API by nic takového jako SQL > injection z principu neumožňovalo. >
Re: Oracle JDBC - chyba ORA-00911: invalid character
> dekuji za upozorneni na SQL injection. V tomto pripade se jedna o interni > query, kdy uzivatel nema moznost parametr mid primo ovlivnit. Proto jsem > pro jednoduchost zvolil prostou konkatenaci stringu. > Pokud jde o jednoduchost, tak naprosto nejjednodušší přístup je *vždycky* používat parametry a *nikdy* neskládat dotaz ze stringů. Za to by měl být ve slušné firmě okamžitě vyhazov. LT P.S.: SQL je zlo. Rozumné databázové API by nic takového jako SQL injection z principu neumožňovalo.
Re: Oracle JDBC - chyba ORA-00911: invalid character
A nemáte tu metodu ve třídě objektu, který je vystavený v JNDI třeba s remote interface, nebo nepoužívá / nedění tu metodu jiná třída vybavená remote interface a publikovaná v JNDI? Pak by si ten objekt s metodou mohl vzít a zavolat člověk třeba z jiného aplikačního serveru. Samozřejmě za předpokladu splnění řady dalších předpokladů, z nichž ovšem sám jako programátor můžete ovlivnit jen některé. Ale právě proto je třeba svoji práci udělat co nejlépe, abyste se nemusel pouze spoléhat na to, že svoji práci udělají co nejlépe jen ti ostatní... Jirka Chaloupka Dne 20. ledna 2013 12:26 Dušan Rychnovský napsal(a): > Tomu moc nerozumim (JAAS neznam), ale aby nekdo mohl danou metodu zavolat, > musi nejprve instanciovat danou tridu a tedy predat ji connection do > databaze. Aby ale mohl ziskat connection, musi znat pristupove udaje. A > pokud zna pristupove udaje do DB, muze si nad ni spustit vlastni query. > Nebo je v tom nejaky hacek? > > Dekuji, > Dusan > > Dne 20. ledna 2013 12:18 Jiří Chaloupka napsal(a): > >> JAAS > > > >
Re: Oracle JDBC - chyba ORA-00911: invalid character
Tomu moc nerozumim (JAAS neznam), ale aby nekdo mohl danou metodu zavolat, musi nejprve instanciovat danou tridu a tedy predat ji connection do databaze. Aby ale mohl ziskat connection, musi znat pristupove udaje. A pokud zna pristupove udaje do DB, muze si nad ni spustit vlastni query. Nebo je v tom nejaky hacek? Dekuji, Dusan Dne 20. ledna 2013 12:18 Jiří Chaloupka napsal(a): > JAAS
Re: Oracle JDBC - chyba ORA-00911: invalid character
Dobré nedělní odpoledne nechci moc bořit iluze, jen v tom případě předpokládám, máte na úrovni JAAS ošetřeno, že danou metodu může zavolat jen ta konkrétní aplikace ... Jirka Chaloupka Dne 20. ledna 2013 12:15 Dušan Rychnovský napsal(a): > Dobry den, > > dekuji za upozorneni na SQL injection. V tomto pripade se jedna o interni > query, kdy uzivatel nema moznost parametr mid primo ovlivnit. Proto jsem > pro jednoduchost zvolil prostou konkatenaci stringu. > > Dusan > > Dne 19. ledna 2013 23:01 Jiří Chaloupka napsal(a): > > Ahoj, >> pravda, v uvedeném případě asi na nic, používám ho spíše ze zvyku všude >> tam, kde je předpoklad dalšího skládání stringů - tam se využije, zde se >> stringy neskládají. >> >> Jirka >> >> 2013/1/16 msk.conf >> >> Mozem sa opatrne opytat, k comu je ten StringBuffer? >>> >>> Dusan >>> >>> >>> StringBuffer queryS = new StringBuffer(); queryS.append("select a from pfa_audit a where a.mid = :value "); Query query = entityManager.createQuery(queryS.toString()); query.setParameter("value", valueint); return query.getResultList(); >>> >>> >> >
Re: Oracle JDBC - chyba ORA-00911: invalid character
Dobry den, dekuji za upozorneni na SQL injection. V tomto pripade se jedna o interni query, kdy uzivatel nema moznost parametr mid primo ovlivnit. Proto jsem pro jednoduchost zvolil prostou konkatenaci stringu. Dusan Dne 19. ledna 2013 23:01 Jiří Chaloupka napsal(a): > Ahoj, > pravda, v uvedeném případě asi na nic, používám ho spíše ze zvyku všude > tam, kde je předpoklad dalšího skládání stringů - tam se využije, zde se > stringy neskládají. > > Jirka > > 2013/1/16 msk.conf > > Mozem sa opatrne opytat, k comu je ten StringBuffer? >> >> Dusan >> >> >> StringBuffer queryS = new StringBuffer(); >>> queryS.append("select a from pfa_audit a where a.mid = :value "); >>> Query query = entityManager.createQuery(queryS.toString()); >>> query.setParameter("value", valueint); >>> return query.getResultList(); >>> >> >> >
Re: Oracle JDBC - chyba ORA-00911: invalid character
Ahoj, pravda, v uvedeném případě asi na nic, používám ho spíše ze zvyku všude tam, kde je předpoklad dalšího skládání stringů - tam se využije, zde se stringy neskládají. Jirka 2013/1/16 msk.conf > Mozem sa opatrne opytat, k comu je ten StringBuffer? > > Dusan > > > StringBuffer queryS = new StringBuffer(); >> queryS.append("select a from pfa_audit a where a.mid = :value "); >> Query query = entityManager.createQuery(**queryS.toString()); >> query.setParameter("value", valueint); >> return query.getResultList(); >> > >
RE: Oracle JDBC - chyba ORA-00911: invalid character
Ø P.S.: Ačkoliv to není z mého dotazu zřejmé, mid je v databázi reprezentovaný jako NVARCHAR, proto ty apostrofy kolem hodnoty. V kódu byste se o apostrofy neměl starat vůbec. Nenapsal jste, jakého typu a jakým způsobem plníte "query". Je zapotřebí vždy s dotazem posílat celou relevantní část kódu….. Předjímám, že to konstruujete nějak takto: String query = "select …. WHERE mid = '" + aValue + "';"; Pokud ano, pak si nastudujte pojem "SQL injection". (Nápověda: Když v "aValue" bude obsah políčka formuláře které plní uživatel, co se stane, když tam vtipálek napíše: 123';DROP TABLE pfa_audit' Správné řešení je (zhruba): String sql = "select …. WHERE mid = ?"; PreparedStatement stm = connection. prepareStatement(sql); stm.setLong(1 /*sloupce od 1 :-/ */, aValue); > StringBuffer queryS = new StringBuffer(); queryS.append("select a from pfa_audit a where a.mid = :value "); Query query = entityManager.createQuery(queryS.toString()); query.setParameter("value", valueint); return query.getResultList(); Ø Mozem sa opatrne opytat, k comu je ten StringBuffer? V tomto kódu samozřejmě k ničemu. Možná to někdo vykopíroval z existujícího kódu a necitlivě to pokrátil. Dále tam v odpovědi ani nebylo zmíněno, že se jedná o Hibernate, natož aby tam byl odkaz aspoň na dokumentaci nebo tutoriál. Pokud ale původní tazatel evidentně použil JDBC, pak takováto odpověď je IMHO mimo mísu. Michal Polák
Re: Oracle JDBC - chyba ORA-00911: invalid character
Děkuji za pomoc, odstranění středníku na konci query problém vyřešilo. P.S.: Ačkoliv to není z mého dotazu zřejmé, mid je v databázi reprezentovaný jako NVARCHAR, proto ty apostrofy kolem hodnoty. Dušan 2013/1/16 msk.conf > Mozem sa opatrne opytat, k comu je ten StringBuffer? > > Dusan > > > StringBuffer queryS = new StringBuffer(); >> queryS.append("select a from pfa_audit a where a.mid = :value "); >> Query query = entityManager.createQuery(queryS.toString()); >> query.setParameter("value", valueint); >> return query.getResultList(); >> > >
Re: Oracle JDBC - chyba ORA-00911: invalid character
Mozem sa opatrne opytat, k comu je ten StringBuffer? Dusan StringBuffer queryS = new StringBuffer(); queryS.append("select a from pfa_audit a where a.mid = :value "); Query query = entityManager.createQuery(queryS.toString()); query.setParameter("value", valueint); return query.getResultList();
Re: Oracle JDBC - chyba ORA-00911: invalid character
Vadí ten středník Michal Dne 16.1.2013 11:15, Dušan Rychnovský napsal(a): Dobrý den, posílám do Oracle DB pres JDBC driver tuto query: SELECT status FROM pfa_audit WHERE mid = '865091'; tímto kódem: Statement statement = connection.createStatement(); return statement.executeQuery(query); Nicméně v odpověď se mi vrací SQLException se zprávou ORA-00911: invalid character (na konci je ještě obdélníček). Když pošlu tu samou query přes sqlplus, zpracování proběhne korektně. Kde hledat chybu? Předem děkuji, Dušan Rychnovský
Re: Oracle JDBC - chyba ORA-00911: invalid character
Ahoj, zkus to bez těch uvozovek - podle toho jak to vypadá tak je tam číslo, a on podle vozovek hledá řetězec. Takže, pokud to už chceš psát takto, tak SELECT status FROM pfa_audit WHERE mid = 865091; Jinak bych doporučil něco jako toto: StringBuffer queryS = new StringBuffer(); queryS.append("select a from pfa_audit a where a.mid = :value "); Query query = entityManager.createQuery(queryS.toString()); query.setParameter("value", valueint); return query.getResultList(); vrátí objekt reprezentovaný záznamem v té tabulce a pak na něj přistupuješ jako na obj.getStatus() Jirka Dne 16. ledna 2013 11:15 Dušan Rychnovský napsal(a): > Dobrý den, > > posílám do Oracle DB pres JDBC driver tuto query: > > SELECT status FROM pfa_audit WHERE mid = '865091'; > > tímto kódem: > > Statement statement = connection.createStatement(); > return statement.executeQuery(query); > > Nicméně v odpověď se mi vrací SQLException se zprávou ORA-00911: invalid > character (na konci je ještě obdélníček). > > Když pošlu tu samou query přes sqlplus, zpracování proběhne korektně. > > Kde hledat chybu? > > Předem děkuji, > Dušan Rychnovský > >
Re: Oracle JDBC - chyba ORA-00911: invalid character
Středník bych tam v javě necpal Dne 16.1.2013 11:15 "Dušan Rychnovský" napsal(a): > Dobrý den, > > posílám do Oracle DB pres JDBC driver tuto query: > > SELECT status FROM pfa_audit WHERE mid = '865091'; > > tímto kódem: > > Statement statement = connection.createStatement(); > return statement.executeQuery(query); > > Nicméně v odpověď se mi vrací SQLException se zprávou ORA-00911: invalid > character (na konci je ještě obdélníček). > > Když pošlu tu samou query přes sqlplus, zpracování proběhne korektně. > > Kde hledat chybu? > > Předem děkuji, > Dušan Rychnovský > >
Oracle JDBC - chyba ORA-00911: invalid character
Dobrý den, posílám do Oracle DB pres JDBC driver tuto query: SELECT status FROM pfa_audit WHERE mid = '865091'; tímto kódem: Statement statement = connection.createStatement(); return statement.executeQuery(query); Nicméně v odpověď se mi vrací SQLException se zprávou ORA-00911: invalid character (na konci je ještě obdélníček). Když pošlu tu samou query přes sqlplus, zpracování proběhne korektně. Kde hledat chybu? Předem děkuji, Dušan Rychnovský