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

问题描述 投票:0回答:3

假设 SchemaRDD

rdd
带有注册表
customer
。您想要根据用户输入过滤掉记录。您可能知道如何执行此操作的一个想法如下:

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

但是,从 PHP 的旧时代开始,我们就知道这可能会导致令人讨厌的事情。 是否有相当于PreparedStatement 的东西?我能找到的唯一看起来远程相关的是

org.apache.commons.lang.StringEscapeUtils.escapeSql

scala security hive apache-spark apache-spark-sql
3个回答
1
投票

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


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。


0
投票

请参阅此处的答案,了解如何使用内置功能在 pyspark 3.3.0+ 中执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.