Проблемы безопасности массовой загрузки (SQLXML 4.0)
Ниже приведены рекомендации по безопасности при использовании массовой загрузки XML.
Если вы указываете, что операция массовой загрузки должна выполняться в виде транзакции, необходимо с помощью свойства TempFilePath задать каталог, в котором создаются временные файлы.
Процесс массовой загрузки создает эти временные файлы со следующими разрешениями:
Процессу массовой загрузки предоставляется доступ на Чтение/Запись/Удаление.
Разрешение на чтение предоставляется всем пользователям, так как учетная запись, под которой Microsoft SQL Server будет осуществлять доступ к этим файлам, не известна. Можно ограничить доступ к этим временным файлам, задав соответствующие разрешения на каталог, содержащий файлы.
Массовая загрузка XML сама по себе не имеет настроек разрешения. Предполагается, что база данных настроена верно, и пользовательский контекст (то есть имя входа, которое используется массовой загрузкой) имеет соответствующий набор разрешений.
В нетранзактном режиме в случае возникновения ошибки в процессе массовой загрузки данные могут остаться в состоянии частичной загрузки. В этом случае массовая загрузка просто останавливается. Чтоб смягчить эту проблему, можно использовать транзактный режим.
В случае возникновения ошибок массовой загрузки в них могут быть включены сведения о базе данных. Например, ошибки могут содержать имя таблицы или столбца или сведения о типе столбца. При использовании массового копирования необходимо заботиться о том, чтобы перехватывать ошибки процесса массовой загрузки и возвращать общее сообщение об ошибке, а не отображать ошибки непосредственно пользователю.
Массовая загрузка не накладывает ограничения на размер обрабатываемых данных. Массовая загрузка на выполняет проверку размера загружаемых данных. Пользователь отвечает за то, чтобы обеспечить в процессе массовой загрузки достаточный объем памяти для обработки указанного файла и достаточное пространство в базе данных для хранения загружаемых данных.
Массовая загрузка не осуществляет попыток использовать полученные данные как код. Входные данные никогда не выполняются никаким образом. Любой код и команды во входных данных рассматриваются как обычные данные и не выполняются.
Массовая загрузка может выполнить форматирующие изменения полученных данных, основанных на различиях между моделями данных XML и SQL Server. Например, различаются форматы задания времени. Массовая загрузка попытается разрешить эти различия. В результате некоторая часть данных о точности может быть потеряна.
Массовая загрузка не накладывает ограничений на количество времени, которое потребуется на обработку данных. Обработка продолжится до завершения или до тех пор, пока не возникнут ошибки.
Массовая загрузка может создать и удалить временные таблицы в базе данных, для этого ей необходимы разрешения. Разрешения на эти таблицы будут даны пользователю, который подключается к базе данных для выполнения процесса массовой загрузки.
Массовая загрузка может создать и удалить временные файлы, используемые при обработке в транзактном режиме, для этого ей необходимы разрешения. Эти файлы создаются с теми же разрешениями, с которыми запускается текущий пользователь потока внутри массовой загрузки.
Если пользователь задает для SQLXML файл журнала ошибок для записи ошибок, то каждый раз при выполнении массовой загрузки этот файл будет перезаписываться данными последнего процесса массовой загрузки.