首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止MySQL-Python在数据库名称参数周围插入引号。

防止MySQL-Python在数据库名称参数周围插入引号。
EN

Stack Overflow用户
提问于 2012-04-09 17:22:18
回答 1查看 2.6K关注 0票数 6

我正在进行一个项目,它要求我以编程的方式从django应用程序创建MySQL用户。我可以很好地创建用户:

代码语言:javascript
复制
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'))

效果很好。问题是当我试图授予权限时。还以编程方式确定数据库名称:

代码语言:javascript
复制
cursor.execute("GRANT SELECT ON %s.* TO %s@'%'", ('dbname', 'username'))

这会导致mysql错误,因为当它执行字符串替换时,它在数据库名称周围放置单引号,这在语法上是不正确的:

DatabaseError:(1064,“您的SQL语法有错误;请检查与MySQL服务器版本对应的手册,以获得在”dbname.*“到第1行”用户名“@‘%’附近使用的正确语法)。

如何防止在数据库名的%s周围添加单引号?我知道我可以简单地在Python中执行字符串替换并修复这个问题,但这可能会导致SQL注入漏洞。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-09 17:30:40

有时占位符不能工作(正如您已经发现的那样),因此您必须使用字符串连接。小心--验证字符串,确保它只由您期望的字符组成(不要只查找您不期望的字符),您应该没事。另外,让另一个开发人员检查您的代码,并对其进行注释,以确保没有人认为您应该使用占位符。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10077046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档