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

nnt7mjpx  于 2023-08-04  发布在  Hive
关注(0)|答案(3)|浏览(246)

假设SchemaRDD rdd具有一个注册表customer。您希望根据用户输入筛选出记录。你可能有一个想法如何做到这一点是如下:

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

字符串
然而,从PHP的旧时代开始,我们就知道这可能会导致令人讨厌的事情。是否存在与PreparedStatement等效的语句?我能找到的唯一看起来有点相关的东西是org.apache.commons.lang.StringEscapeUtils.escapeSql

flvlnr44

flvlnr441#

一种选择是使用thriftserver来公开jdbc,然后可以使用常用的技术(PreparedStatement等)来防止sql注入。

yftpprvb

yftpprvb2#

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。

pftdvrlh

pftdvrlh3#

有关如何在pyspark 3.3.0+中使用内置功能执行此操作,请参阅answer here

相关问题