1
SQLインジェクション攻撃から保護されている間に、jdbcにSQLクエリをサブミットしようとしています。私はApache Spark JDBC SQLインジェクション(pyspark)
from pyspark import SparkContext
from pyspark.sql import DataFrameReader, SQLContext
from pyspark.sql.functions import col
url = 'jdbc:mysql://.../....'
properties = {'user': '', 'driver': 'com.mysql.jdbc.Driver', 'password': ''}
sc = SparkContext("local[*]", "name")
sqlContext = SQLContext(sc)
from pyspark.sql.functions import desc
pushdown_query = """(
select * from my_table
where timestamp > {}
) AS tmp""".format(my_date)
df = sqlContext.read.jdbc(url=url, properties=properties, table=pushdown_query)
私は何とかバインドのparamsを使用することができますようないくつかのコードを持っていますか?
ここにSQLインジェクションができないような解決策があれば、うまくいくでしょう。
SQLAlchemyも役に立ちます。
from sqlalchemy.dialects import mysql
from sqlalchemy import text
pushdown_query = str(
text("""(select * from my_table where timestamp > :my_date) AS tmp""")
.bindparams(my_date=my_date)
.compile(dialect=mysql.dialect(), compile_kwargs={"literal_binds": True}))
df = sqlContext.read.jdbc(url=url, properties=properties, table=pushdown_query)
を単純な場合には、このように、サブクエリのための必要はありません:あなたはSQLAlchemyのを使用している場合