Невозможно передать имена столбцов, как параметризовано в команде ADD COLUMNS в соединителе databricks-sql (необходимо дPython

Программы на Python
Ответить
Anonymous
 Невозможно передать имена столбцов, как параметризовано в команде ADD COLUMNS в соединителе databricks-sql (необходимо д

Сообщение Anonymous »

Я разрабатываю веб-приложение, которое взаимодействует с Databricks с помощью SQL-коннектора Databricks. Приложение позволяет пользователям из разных команд добавлять/переименовывать/удалять столбцы существующих таблиц. Информация о столбце принимается в виде параметров HTTP. Сник начал поднимать вопрос об уязвимости внедрения SQL-кода, поскольку в первоначальной версии мы передавали параметры в запрос через стиль строки формата. Чтобы решить эту проблему, мы попытались использовать IDENTIFIER() для имени схемы/таблицы, но то же самое не работает с именами столбцов в команде ALTER, UPDATE. Вы можете обратиться к этому сообщению в блоге https://community.databricks.com/t5/tec ... ba-p/82167
Вот соответствующая часть моего кода:

Код: Выделить всё

    def add_config(self, user_name, action, schema_name, table_name, field_names, field_datatypes):
alter_query = "ALTER TABLE IDENTIFIER(:sch || '.' || :tab) ADD COLUMNS ({})".format(columns_str)
cursor.execute(alter_query, {'sch': schema_name,'tab': table_name})
self.conn.commit()
Я также реализовал базовую проверку ввода безопасных идентификаторов:

Код: Выделить всё

def is_safe_identifier(self, identifier):
return re.match(r'^[a-zA-Z0-9_]+$', identifier) is not None
Это необходимо для обеспечения очистки входных данных для параметров http.
Как я могу изменить свой код, чтобы добиться разрешения SQL-инъекции, одновременно реализуя реализуемую функцию (динамическое добавление столбцов)? Не могу придумать никакого другого метода, кроме строки формата.

Подробнее здесь: https://stackoverflow.com/questions/795 ... in-databri
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»