Re: Oracle JDBC - chyba ORA-00911: invalid character

2013-01-21 Tema obsahu Ondra Medek
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

2013-01-20 Tema obsahu Dušan Rychnovský
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

2013-01-20 Tema obsahu Jiří Chaloupka
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

2013-01-20 Tema obsahu Dušan Rychnovský
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

2013-01-20 Tema obsahu Jiří Chaloupka
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

2013-01-20 Tema obsahu Ladislav Thon
 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

2013-01-20 Tema obsahu Dušan Rychnovský
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

2013-01-20 Tema obsahu 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ý 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

2013-01-19 Tema obsahu Jiří Chaloupka
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

2013-01-16 Tema obsahu Michal Barna

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

2013-01-16 Tema obsahu Dušan Rychnovský
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

2013-01-16 Tema obsahu Polak Michal
Ø  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