Я работаю над проектом, который требует от меня программного создания пользователей MySQL из приложения django. Я могу создать пользователей просто отлично:
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'. *на 'username'@'%'' в строке 1")
Как мне предотвратить добавление одинарных кавычек вокруг %s
для имени базы данных? Я знаю, что могу просто выполнить замену строк в Python и исправить это, но это потенциально может привести к уязвимости SQL-инъекций.