Предотвращение MySQL-Python от вставки кавычек вокруг параметра имени базы данных

Я работаю над проектом, который требует от меня программного создания пользователей 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-инъекций.

6
задан dgel 9 April 2012 в 17:29
поделиться