シナリオ:Apacheのスパーク:SparkSqlでは、SQLの脆弱SQLインジェクションにしている
がハイブ内のテーブルがあると言う、そしてそれは、テーブル名が渡され、以下のSparkSql Apacheでのスパークを、使用して照会されます引数として渡され、クエリに連結されます。
非分散システムの場合、私はSQLインジェクションの脆弱性を基本的に理解しており、JDBCのコンテキストでは、このようなシナリオでcreateStatement/preparedStatementの使用法を理解しています。
sparksqlの場合、このシナリオはどうですか?このコードは脆弱ですか?どんな洞察?
def main(args: Array[String]) {
val sconf = new SparkConf().setAppName("TestApp")
val sparkContext = new SparkContext(sconf)
val hiveSqlContext = new org.apache.spark.sql.hive.HiveContext(sparkContext)
val tableName = args(0) // passed as an argument
val tableData = hiveSqlContext.sql("select IdNUm, Name from hiveSchemaName." + tableName + " where IdNum <> '' ")
.map(x => (x.getString(0), x.getString(1))).collectAsMap()
................
...............
}
SparkSessionはv2.0以降で利用できます。制限は1.5で完了させる必要があります。 sqlContextまたはhiveSqlContextを介してSparkContextを使用して同様のことを行うことは可能ですか? –
SparkSessionの代わりにSqlContextを使用することができます –