私は、私の個人的なプロジェクトの mysql データベースと関連するアカウントの作成を自動化するのに役立つ小さな python スクリプトを書いています。このスクリプトの一部は、データベース名を文字列として受け取り、データベースを作成する関数です。
def createDB(dbConn, dbName):
import MySQLdb
c = dbConn.cursor()
query = """CREATE DATABASE %s;""";
c.execute(query, (dbName,))
次のように、 MySQL の CREATE DATABASEが引用符で囲まれていないデータベースの名前を要求するため、これは機能しません。
CREATE DATAbASE test_db
しかし、ユーザーが提供したデータベース名をクエリに安全に挿入しようとする私のコードは次を作成します:
CREATE DATABASE 'test_db'
そして、「テストに近い MySQL 構文に問題があります」というメッセージが表示されます。
これは個人的な使用のためのものですが、ユーザーが提供した文字列をあらゆる種類のクエリに直接挿入したくありません。それは私の宗教に反しています。ユーザーが指定したデータベース名を python (または任意の言語) の mySQL クエリに挿入して、ユーザー入力test_db; DROP some_other_db;
が拒否または正しくエスケープされることを確認する安全な方法はありますか?