2016-12-06 4 views
0

私は、Hibernateを使用するJava Webサービスを持っています。そのメソッドの1つは、SQL Serverで新しいテーブルを作成するように設計されており、そのテーブルはオブジェクトにマップされていません。現在のデザインでは、データベース名、スキーマ名、テーブル名、およびフィールド定義を引数として受け取り、それらからクエリ文字列を作成して実行します。それは正常に動作しますが、SQLインジェクションの欠陥です。SQLインジェクションの欠陥を導入せずにHibernate Java Webサービスで新しいテーブルを作成するにはどうしたらいいですか?

パラメータ化クエリを使用して、インスタンスのために、この欠陥を導入するか、私は知らない休止状態にあるいくつかの機能を使用せずにテーブルを作成する方法はありますか?

欠陥がcreateSQLQueryへの呼び出しで行わ:

String sSql = "CREATE TABLE [" + sDatabaseName + "].[" + sSchema + "].[" + sTableName + "] (" + sSqlFields + ")"; 
Session session = getSession(); 
Query q = session.createSQLQuery(sSql); 
q.executeUpdate(); 

答えて

0

それが可能です。

String sSql = "CREATE TABLE [ ? ].[ ? ].[ ? ] (?)"; 
Query q = session.createQuery(sSql); 
q.setString(0, sDatabaseName) 
.setString(1, sSchema) 
.setString(2, sTableName) 
.setString(3, sSqlFields) 
.executeUpdate(); 
+0

おかげで、マイケル:あなたは次のようにクエリをparameteriseすることができます。私はそれがまさに私が探していたものだと思う。 – Dragon

+0

問題ありません。あなたが助けてくれれば、回答をアップアップしたり受け入れることができます。 – Michael

+0

私はupvoteにまだスコアを持っていませんが、私は答えを受け入れました。再度、感謝します。 – Dragon

関連する問題