我正在研究一个需要我以编程方式从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