Основные проблемы безопасности SQLXML

Далее приведены рекомендации по безопасности при использовании SQLXML для доступа к данным.

  • Поставщик SQLXMLOLEDB имеет свойство StreamFlags, которое позволяет устанавливать флаги, указывающие, какие функции SQLXML следует включить или отключить для каждого конкретного экземпляра. При помощи этого свойства можно настраивать использование SQLXML, а также гарантировать, что работать будут только требуемые компоненты. Дополнительные сведения см. в разделе Поставщик SQLXMLOLEDB (SQLXML 4.0).

  • Когда возникают и возвращаются ошибки SQLXML, они могут содержать такие сведения о базе данных, как имена таблиц, имена столбцов или сведения о типе. При обработке этих ошибок следует соблюдать осторожность с тем, чтобы сведения об установке SQL Server не стали доступными пользователям, когда в этом нет необходимости.

  • SQLXML, при его использовании для выполнения запроса или отправки обновлений на SQL Server, не устанавливает ограничений на объем данных, обмен которыми производится, и не выполняет каких-либо проверок размера полезных данных SQLXML перед их обработкой. При разработке приложения с использованием SQLXML следует самостоятельно позаботиться о наличии достаточного объема памяти в системе для обработки этих данных. Например, при запросе данных с сервера следует проверить, что на клиенте достаточно свободной памяти, чтобы принять их. Точно также, при загрузке данных на сервер необходимо проверить наличие достаточного объема свободной памяти на сервере для их обработки, а также достаточного объема свободного дискового пространства на сервере для хранения данных.

  • SQLXML динамически формирует запросы Transact-SQL и команды обновления, и отправляет их на SQL Server для выполнения. SQLXML выполняет запросы и обновляет сервер только таким образом. Результаты будут получены либо в виде потока (XML-данных), либо как набор строк.

  • SQLXML, при получении результатов запроса, не предпринимает каких-либо действий, исходя из содержимого получаемых данных. Никакой дополнительной обработки на основе типа или содержимого данных не производится. Данные никогда не рассматриваются, как код, с помощью которого нужно выполнять действия.

  • При выполнении шаблонов XML SQLXML переводит запросы XPath и DBObject, содержащиеся в отправленном шаблоне, в команды Transact-SQL, которые затем выполняются на SQL Server. Только эти команды всегда затрагивают существующие данные. Команды, сформированные SQLXML, никогда не изменяют структуру базы данных. Пользователь должен явным образом дать команду на изменение структуры базы данных. Для этого можно, например, включить их в блок sql:query шаблона.

  • При выполнении запросов DBObject и инструкций XPath над файлами сопоставлений SQLXML никак не меняет данные в базе данных.

  • SQLXML может внести изменение в форматирование определенных данных, исходя из различий между моделями данных XML и SQL Server. Например, различаются форматы задания времени. SQLXML попытается разрешить эти различия. В результате некоторая часть данных о точности может быть потеряна.

  • SQLXML не ограничивает количество времени, которое требуется для обработки данных. Обработка будет выполняться до возникновения ошибки либо завершения обработки.

  • SQLXML не выполняет запись в файловую систему. Если пользователям требуется сохранить данные, получаемые из базы данных, им придется выполнить сохранение в коде.

  • SQLXML позволяет пользователям выполнять любой запрос SQL к базе данных. Эту функциональность не следует делать доступной для небезопасного или неуправляемого источника, поскольку по сути это является открытием базы данных для любых пользователей.

  • При выполнении диаграмм обновления SQLXML переводит блоки updg:sync в команды DELETE, UPDATE и INSERT, выполняемые на SQL Server. Только эти команды всегда затрагивают существующие данные. Команды, сформированные SQLXML, никогда не изменяют базу данных. Пользователь должен явным образом дать команду на изменение структуры базы данных. Для этого можно, например, включить их в блок sql:query шаблона.

  • При выполнении DiffGram SQLXML переводит DiffGram в команды DELETE, UPDATE и INSERT, выполняемые в SQL Server. Только эти команды всегда затрагивают существующие данные. Команды, сформированные SQLXML, никогда не изменяют базу данных. Пользователь должен явным образом дать команду на изменение структуры базы данных. Для этого можно, например, включить их в блок sql:query шаблона.

См. также

Справочник