Я использую pymssql для обновления, удаления и добавления столбцов на сервер MS SQL. столбцы являются грустными переменными, заданными внешними источниками, такими как чтение базы данных, чтение из другой базы данных. Теперь я пытаюсь предотвратить «плохой» sql, чтобы пройти, поскольку я не знаю точно, что дает мне другая база данных.Лучший способ предотвратить SQL-инъекцию при использовании столбца как переменной
'ALTER TABLE tablenameA ADD [' + columnname + '] varchar(25) NULL'
'ALTER TABLE tablenameA DROP COLUMN ['+columnname+']'
('UPDATE tablenameA SET [' + columnname + ']=%s WHERE id = 2', value)
Теперь я не могу использовать белый список, как я не знаю, что имена столбцов должны быть добавлены, мой только другой вариант я могу думать о том, чтобы использовать черный список, но я был, если интересно, может быть, существует третий вариант.
(Имена столбцов получили из столбца таблицы с типом строки)
Вы можете использовать ['QUOTENAME'] (https://msdn.microsoft.com/en-us/library/ms176114.aspx) –
Из той же документации' QUOTENAME': * Возвращает строку ** Unicode ** с добавлением разделителей, чтобы сделать входную строку действительным идентификатором с разделителями SQL Server. * Строка все еще не будет работать здесь, так как она не создает полный оператор SQL. –
Будет ли запрашивать базу данных один раз с помощью 'SELECT QUOTENAME (% s)', а затем интерполировать ее в запрос ...? – deceze