dge*_*gel 6 python mysql django mysql-python
我正在开发一个项目,要求我以编程方式从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'))
Run Code Online (Sandbox Code Playgroud)
这非常有效.问题是当我尝试授予权限时.数据库名称也以编程方式确定:
cursor.execute("GRANT SELECT ON %s.* TO %s@'%'", ('dbname', 'username'))
Run Code Online (Sandbox Code Playgroud)
这会导致mysql错误,因为当它执行字符串替换时,它会在数据库名称周围放置单引号,这在语法上是不正确的:
DatabaseError:(1064,"你的SQL语法有错误;请查看与你的MySQL服务器版本相对应的手册,以便在第1行使用''dbname'.*''username'@'%'附近的正确语法")
如何防止在%sfor数据库名称周围添加单引号?我知道我可以简单地在Python中进行字符串替换并修复它,但这可能会导致SQL注入漏洞.
有时占位符不起作用(如您所知),因此您必须使用字符串连接.小心 - 验证字符串,确保它只由你期望的字符组成(不只是寻找你不期望的字符),你应该没问题.还让其他开发人员检查您的代码,并对其进行评论以确保没有其他人认为您应该使用占位符.
| 归档时间: |
|
| 查看次数: |
2247 次 |
| 最近记录: |