在Spark-SQL中避免SQL注入的首选方法是什么(在Hive上)

时间:2015-04-16 08:18:32

标签: scala security hive apache-spark apache-spark-sql

假设SchemaRDD rdd具有注册表customer。您想根据用户输入过滤掉记录。您可能有如何做到这一点的一个想法如下:

rdd.sqlContext.sql(s"SELECT * FROM customer WHERE name='$userInput'")

然而,自从PHP的旧时代以来,我们知道这会导致令人讨厌的事情。 是否有相当于PreparedStatement?我能找到的唯一与远程相关的东西是org.apache.commons.lang.StringEscapeUtils.escapeSql

2 个答案:

答案 0 :(得分:1)

一种选择是使用thriftserver to expose jdbc,然后可以使用常规技术(PreparedStatement等)来阻止sql注入。

答案 1 :(得分:0)

def safeSql(query,**args):
    spark.udf.register("arg", lambda x: args[x])
    return(spark.sql(query))
     
safeSql("select arg('a'),arg('b')",a=4,b="O'Malley").show()

以上是在 pyspark 中,但可以在 Scala 或其他语言中完成。诀窍是注册一个 udf。