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 :
> 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

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ý 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

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  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 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 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ý 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

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  napsal(a):

> JAAS


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ý 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

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  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

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 

> 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


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 

> 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 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

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 Jiří Chaloupka
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

2013-01-16 Tema obsahu Martin Beránek
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

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