我正在研究一個需要我以編程方式從django應用程序創建MySQL用戶的項目。我可以創建用戶就好了:防止MySQL-Python圍繞數據庫名稱參數插入引號
from django.db import connection, transaction
cursor = connection.cursor()
cursor.execute("CREATE USER %[email protected]'%'", 'username')
cursor.execute("SET PASSWORD FOR %[email protected]'%' = PASSWORD(%s)", ('username', 'pass'))
完美地工作。問題是當我嘗試授予權限時。數據庫名稱也編程方式確定:
cursor.execute("GRANT SELECT ON %s.* TO %[email protected]'%'", ('dbname', 'username'))
這導致MySQL錯誤,因爲當它的字符串替換,它把周圍的數據庫名稱,這在語法上是不正確的單引號:
DatabaseError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''dbname'.* to 'username'@'%'' at line 1")
如何防止在%s
的數據庫名稱周圍添加單引號?我知道我可以簡單地在Python中進行字符串替換並修復此問題,但這可能會導致SQL注入漏洞。
看起來可能不可能。根據mysql-python文檔:_Parameter佔位符只能用於插入列值。它們不能用於SQL的其他部分,例如表名,語句等._ – dgel 2012-04-09 17:26:57