我正在做一个项目,该项目需要我从 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 服务器版本相对应的手册,以获取正确的语法,以便在第 1 行的 ''dbname'.* 到 'username'@'%'' 附近使用")
如何防止在%s
for 数据库名称周围添加单引号?我知道我可以简单地在 Python 中进行字符串替换并修复这个问题,但这可能会导致 SQL 注入漏洞。