Re: Oracle JDBC - chyba ORA-00911: invalid character
A navic prepared statementy jsou na rade DB strojich i rychlejsi. 2013/1/20 Jiří Chaloupka k...@chalu.cz: 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ý geraltzri...@gmail.com 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 ladi...@gmail.com 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
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 k...@chalu.cz 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 msk.c...@gmail.com 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
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ý geraltzri...@gmail.comnapsal(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 k...@chalu.cz 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 msk.c...@gmail.com 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
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 k...@chalu.cz napsal(a): JAAS
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ý geraltzri...@gmail.comnapsal(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 k...@chalu.cz napsal(a): JAAS
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
Ten objekt pro vzdaleny pristup nikde vystaveny neni, aplikace je standalone (nebezi v aplikacnim serveru). Dusan Dne 20. ledna 2013 13:09 Ladislav Thon ladi...@gmail.com 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
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ý geraltzri...@gmail.comnapsal(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 ladi...@gmail.com 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
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 msk.c...@gmail.com 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
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 msk.c...@gmail.com 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