我正在进行一个项目,它要求我以编程的方式从django应用程序创建MySQL用户。我可以很好地创建用户:
from django.db import connection, transaction
cursor = connection.cursor()
cursor.execute("CREATE USER %s@'%'", 'username')
cursor.execute("SET PASSWORD FOR %s@'%' = PASSWORD(%s)", ('username', 'pass'))效果很好。问题是当我试图授予权限时。还以编程方式确定数据库名称:
cursor.execute("GRANT SELECT ON %s.* TO %s@'%'", ('dbname', 'username'))这会导致mysql错误,因为当它执行字符串替换时,它在数据库名称周围放置单引号,这在语法上是不正确的:
DatabaseError:(1064,“您的SQL语法有错误;请检查与MySQL服务器版本对应的手册,以获得在”dbname.*“到第1行”用户名“@‘%’附近使用的正确语法)。
如何防止在数据库名的%s周围添加单引号?我知道我可以简单地在Python中执行字符串替换并修复这个问题,但这可能会导致SQL注入漏洞。
发布于 2012-04-09 17:30:40
有时占位符不能工作(正如您已经发现的那样),因此您必须使用字符串连接。小心--验证字符串,确保它只由您期望的字符组成(不要只查找您不期望的字符),您应该没事。另外,让另一个开发人员检查您的代码,并对其进行注释,以确保没有人认为您应该使用占位符。
https://stackoverflow.com/questions/10077046
复制相似问题