Отправляет email-рассылки с помощью сервиса Sendsay

MS SQL Server

  Все выпуски  

MS SQL Server - дело тонкое...


Информационный Канал Subscribe.Ru


#102<<  #103

СОДЕРЖАНИЕ

1.БЕЗОПАСНОСТЬ
1.1.Unchecked Buffer in SQLXML Could Lead to Code Execution (Q321911)
2.СОВЕТЫ
2.1.XML в MS SQL Server 2000 и технологиях доступа к данным (продолжение)
2.1.1.XML Bulk Load
2.ССЫЛКИ НА СТАТЬИ
2.1.Отечественные статьи
4.ФОРУМ SQL.RU
4.1.Самые популярные темы недели
4.2.Вопросы остались без ответа
5.ИНФОРМАЦИЯ АВТОРА РАССЫЛКИ

БЕЗОПАСНОСТЬ

12 июня 2002г. Microsoft выпущен бюллетень безопасности Microsoft Security Bulletin MS02-030
"Unchecked Buffer in SQLXML Could Lead to Code Execution (Q321911)"

Обнаружены две уязвимость SQLXML, с помощью которых злоумышленник может передать XML данные на SQL Server 2000. Запросы к базе данных могут быть оформлены в виде XML документов, которые могут быть легко переданы серверу. С помощью SQLXML можно создавать запросы к SQL Server 2000, используя XML и HTTP теги в браузере.
Первая уязвимость буфера, для которого отсутствует проверка типов в ISAPI расширении, вследствие чего возможно не санкционированное исполнение кода на сервере Microsoft Internet Information Services (IIS).
Вторая уязвимость затрагивает функции, определяющие Xml тэг, с помощью которого злоумышленник может выполнять сценарий на компьютере пользователя с более высокими привилегиями, чем это предполагалось. Например, сценарий может быть выполненным в зоне Intranet вместо Internet.

Заплаты можно загрузить тут:

Microsoft SQLXML version shipping with SQL 2000 Gold
Microsoft SQLXML version 2
Microsoft SQLXML version 3:

Эти заплаты могут быть установлены на системы с SQL Server 2000 SP2
Заплата будет включена в SQL Server 2000 SP3.

[Содержание]

СОВЕТЫ

XML в MS SQL Server 2000 и технологиях доступа к данным (продолжение)
По материалам конференции "Корпоративные базы данных 2002"

Автор: Алексей Шуленин

01. Введение
02. Сохранить как XML
03. Получить как поток XML
04. XML на стороне сервера. FOR XML
05. SQLXML-классы в .NET
06. FOR XML на стороне клиента
07. XML-представление наборов данных в ADO .NET
08. Прямые XPath-запросы к объектам SQL Server
09. Аннотированные схемы
10. XML-шаблоны как разновидность хранимых процедур
11. UpdateGrams

12. XML Bulk Load

Большие объемы данных неэффективно "заливать" в базу чередой последовательных insert'ов. Для этого применяются средства массовой загрузки. Аналогом bcp / BULK INSERT при работе с XML-файлами выступает XML Bulk Load. Он не грузит весь документ целиком в память, а прочитывает его по отдельным узлам, понимая на основе аннотированной схемы, когда запись заканчивается и ее можно отправить SQL Server'у для вставки. Использование аннотированных схем позволяет осуществлять наполнение одновременно нескольких связанных таблиц. XML Bulk Load не есть утилита с графическим интерфейсом, а всего лишь СОМ-компонент, устанавливаемый SQLXML веб-релизами. Массовая закачка XML-документа осуществляется программным путем - достаточно написать VB-скрипт из нескольких строчек. Я надеюсь, что эта идея вас не пугает, потому что если вы дочитали до этого места, значит, вы, скорее, разработчики, нежели пользователи или администраторы. Для работы из-под .NET Framework необходимо импортировать библиотеку типов Microsoft SQLXML Bulkload 3.0 Type Library (...\Program Files\Common Files\System\Ole DB\xblkld3.dll).
Объектная модель XML Bulk Load тривиальна. Она состоит из единственного объекта - SQLXMLBulkLoad с единственным методом Execute, принимающим два параметра: аннотированную схему и сам XML-документ. Аннотированная схема, как всегда, задает правила разноски XML- содержания: в какое поле какой таблицы положить тот или иной элемент или атрибут. Собственно, все.
Вот XML, который требуется перенести в БД:


<Книги_по_XML>
    <Книга Название="The Guru's Guide to SQL Server Stored Procedures,
 XML, and HTML" ISBN="0201700468" Страниц<font color=blue>="576">
        <Порядковый_номер>1</Порядковый_номер>
        <Издательство>Wesley Professional</Издательство>
        <Цена_на_Амазоне>34.99</Цена_на_Амазоне>
        <Дата_выхода>2001-12-21</Дата_выхода>
        <Авторы>
            <Автор Имя="Ken" Фамилия="Henderson" />
            <Автор Имя="Ron" Фамилия="Soukup" />
        </Авторы>
    </Книга>
    <Книга Название="Programming Microsoft SQL Server 2000 With XML
 (Pro-Developer)" ISBN="0735613699" Страниц="400">
        <Порядковый_номер>2</Порядковый_номер>
        <Издательство>Microsoft Press</Издательство>
        <Цена_на_Амазоне>41.99</Цена_на_Амазоне>
        <Дата_выхода>2001-06-01</Дата_выхода>
        <Авторы>
            <Автор Имя="Graeme" Фамилия="Malcolm" />
        </Авторы>
    </Книга>
 ...
</Книги_по_XML>

Вот аннотированная схема, которую я для него определил (схема должна находиться в отдельном файле, размещение ее в самом XML-документе не допускается).


<?xml version="1.0" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:ms="urn:schemas-microsoft-com:mapping-schema">
 <xs:annotation>
  <xs:appinfo>
   <ms:relationship name="Книга_Авторы" parent="Book"
   parent-key="BookID" child="Author" child-key="BookID" />
  </xs:appinfo>
 </xs:annotation>
 <xs:element name="Книга" ms:relation="Book">
  <xs:complexType>
   <xs:sequence>
    <xs:element name="Порядковый_номер"
    ms:field="BookID" ms:datatype="int" />
    <xs:element name="Издательство"
    ms:field="Publishing" ms:datatype="varchar(50)" />
    <xs:element name="Цена_на_Амазоне"
    ms:field="Price" ms:datatype="numeric(6,2)" />
    <xs:element name="Дата_выхода"
    ms:field="IssueDate" ms:datatype="smalldatetime" />
    <xs:element name="Авторы"
    maxOccurs="1" ms:is-constant="1">
     <xs:complexType>
      <xs:sequence>
       <xs:element name="Автор" minOccurs="0"
       maxOccurs="unbounded" ms:relation="Author"
       ms:relationship="Книга_Авторы">
        <xs:complexType>
         <xs:attribute name="Имя"
         ms:field="FirstName"
         ms:datatype="nvarchar(50)" />
         <xs:attribute name="Фамилия"
         ms:field="LastName"
         ms:datatype="nvarchar(50)" />
        </xs:complexType>
       </xs:element>
      </xs:sequence>
     </xs:complexType>
    </xs:element>
   </xs:sequence>
   <xs:attribute name="Название" ms:field="Title"
   ms:datatype="nvarchar(200)" />
   <xs:attribute name="ISBN" ms:field="ISBN"
   ms:datatype="char(10)" />
   <xs:attribute name="Страниц"
   ms:field="NumPages" ms:datatype="smallint" />
  </xs:complexType>
 </xs:element>
</xs:schema>

И вот скрипт, который осуществляет загрузку:


class BulkExample
{
 static void BulkLoad_File_SQLXML()
 {
  SQLXMLBULKLOADLib.SQLXMLBulkLoad3Class bl =
  new SQLXMLBULKLOADLib.SQLXMLBulkLoad3Class();
  bl.ConnectionString = "Provider=SQLOLEDB;...";
  bl.SchemaGen = true;
  bl.SGDropTables = true;
  bl.KeepNulls = true;
  bl.Transaction = true;
  bl.ErrorLogFile = "..\\BulkCopy\\XMLDocForBulkLoad.err";
  bl.Execute("..\\BulkCopy\\XMLDocForBulkLoad.xsd",
  "..\\BulkCopy\\XMLDocForBulkLoad.xml");
 }

 [STAThread]
 static void Main()
 {
  BulkLoad_File_SQLXML();
 }
}

Скрипт 13

Следует обратить внимание на атрибут [STAThread], поскольку компонент пока работает только в однопоточном режиме. Свойство SchemaGen, определяет, должны ли таблицы под загрузку создаваться или вставка идет в уже имеющиеся. Чтобы просто создать структуры и не переносить при этом сами данные, нужно еще поставить BulkLoad = false. Имена таблиц и полей, их типы и прочие метаданные определяются аннотированной схемой (ms:relation, ms:field, ms:datatype). Если таблицы уже существуют, то SGDropTables = true заставляет их пересоздаться. Удаление таблиц происходит в том порядке, в котором они упоминаются в XML-файле и может приводить к конфликту с ограничениями primary key/foreign key. Рассмотренный в п.11 ms:inverse при этом не помогает. В том случае, если таблица есть и для поля определено значение по умолчанию, оно будет использоваться, когда в XML-файле соответствующий элемент или атрибут пропущен, но если поставить KeepNulls = true, то значение по умолчанию будет проигнорировано и в поле будет поставлен Null. Аналогично действует свойство KeepIdentity. Если вставка идет в поле типа identity, то false заставляет игнорировать значения для этого поля в XMLном файле и использовать автоинкремент, определенный для него на сервере. CheckConstraints определяет, будут ли проверяться constraints (primary key/foreign key и пр.) при загрузке данных. Свойство Transaction заставляет все действия по загрузке проходить в масштабе единой транзакции, так что ежели что случится, то все будет откачено. Его нельзя использовать при загрузке BLOBов. ForceTableLock устанавливает табличную блокировку на таблицы, задействованные в ходе bulk load. Если в аннотированной схеме поле помечено атрибутом dt:type="id" (xmlns:dt="urn:schemas-microsoft-com:xml:datatypes"), то свойство SGUseID = true приведет к тому, что при создании таблицы на него будет создано ограничение primary key. Если в схеме в <xs:element name<font color=blue>="Книга" ms:relation="Book"> поставить атрибут, ms:key-fields="BookID", то между таблицами Book и Author будет создано ограничение primary key/foreign key по полю BookID. Независимо от этого указание в схеме отношения между таблицами <ms:relationship name="Книга_Авторы" parent="Book" parent-key="BookID" child="Author" child-key="BookID" /> обеспечивает во время массовой загрузки автоматическое заполнение поля BookID в дочерней таблице Author значениями BookID из родительской записи таблицы Book, как происходит в нашем случае:

BookID Publishing Price IssueDate NumPages ISBN Title
1.Wesley Professional34.992001-12-21 00:00:005760201700468 The Guru's Guide to SQL Server Stored Procedures, XML, and HTML
2.Microsoft Press41.992001-06-01 00:00:004000735613699 Programming Microsoft SQL Server 2000 With XML (Pro-Developer)
.....................

LastName FirstName BookID
HendersonKen1
SoukupRon1
MalcolmGraeme2
GriffinJohn3
WilliamsKevin4
.........

Методу Execute можно передавать не только название XML-документа, но и ADODB.Stream:


 ...

StreamReader sr = File.OpenText("..\\BulkCopy\\XMLDocForBulkLoad.xml");
ADODB.StreamClass sc = new ADODB.StreamClass();
sc.Charset = "UTF-8";
sc.Open(System.Type.Missing, ADODB.ConnectModeEnum.adModeUnknown,
ADODB.StreamOpenOptionsEnum.adOpenStreamUnspecified, "", "");
sc.WriteText(sr.ReadToEnd(), ADODB.StreamWriteEnum.stWriteChar);
sc.Position = 0;
bl.Execute("..\\BulkCopy\\XMLDocForBulkLoad.xsd", sc);
sr.Close(); sc.Close();

что позволяет загружать в БД динамически сгенерированный внутри кода XML без необходимости его промежуточного сохранения. Для загрузки XML-фрагмента (набора элементов без корневого, не являющегося каноническим well-formed документом) необходимо использовать свойство XMLFragment.

ПРОДОЛЖЕНИЕ СЛЕДУЕТ

[Содержание]

ССЫЛКИ НА СТАТЬИ

Отечественные статьи

Введение в управление транзакциями. Часть 2
Атомарность транзакции поддерживается журналом транзакций, в котором протоколируются все ее действия. Менеджер транзакций посылает журналу транзакций информацию о старте новой транзакции, и с этого момента в журнале ведется протокол действий транзакции. Журнал обеспечивает сохранение всех произведенных транзакцией изменений в случае ее успешной фиксации и аннулирование всех этих изменений — в случае неуспешного завершения (операция rollback, отказ приложения пользователя, отказ сервера во время обработки транзакции). Журнал транзакций обеспечивает и атомарность выполнения каждой операции модификации базы данных. Журнал обеспечивает выполнение действий, составляющих подобную операцию, над всеми элементами целевого множества. В случае возникновения ошибки при обработке любого из элементов целевого множества операции результаты всех уже выполненных действий операции, аннулируются. Таким образом, целевое множество либо изменяется целиком, либо не изменяется вовсе...
От Web’а SQL’у
Известно, что работу со многими базами данных, их версиями, типами и реализациями облегчает язык запросов SQL, о котором и пойдет речь далее. Точнее, о том, какие ссылки на эту тему можно найти в Глобальной Сети...
Анализ бизнес-информации
Как человек принимает решения или что нужно для полноценного анализа...
SOAP-кодирование, типы WSDL и XML Schema
Использование Web-службы подразумевает обмен хотя бы одним XML-сообщением между отправителем и получателем. Формат сообщения должен быть определен так, чтобы отправитель мог формировать, а получатель обрабатывать сообщение. Формат любого сообщения включает общую структуру дерева (tree), локальное имя и имя пространства имен для элементов и атрибутов, используемых в этом дереве, а также типы этих элементов и атрибутов...
Microsoft SQL Server 2000: поддержка XML
В этой статье мы ознакомимся с некоторыми новыми возможностями Microsoft SQL Server 2000, связанными с поддержкой языка XML. Мы рассмотрим использование SQL-запросов через URL, использование XML-шаблонов, XDR-схем и XPath-запросов, а также приведем некоторые примеры работы с механизмом updategrams, позволяющим применять XML-шаблоны для вставки, удаления и обновления данных...
Представления идентифицируемых сложных объектов в реляционной базе данных
Из названия следует, что речь в статье будет идти о совмещении объектной и реляционной систем. Надо отметить, что эта тема послужила поводом для написания большого количества работ. Спектр мнений представленный в этих работах чрезвычайно широк и, начиная с идеи о практической идентичности данных моделей, требующей лишь незначительного расширения одной из них, кончается явным противопоставлением, ведущим к выводу о невозможности их объединения. Критике в той или иной мере подвергаются обе модели...
Моделирование AS-IS: за и против
Следует ли мне строить модели AS-IS (моделирование существующего положения)? Невозможно ответить до того, как вы сначала не спросите себя, почему вы взялись за этот проект...
Новый менеджмент, или зачем нужен системный анализ на основе BPwin
Современные экономические условия делят всех участников экономических отношений на неудачников и преуспевающих. Многие управляющие в определенный момент сталкиваются с казалось бы невероятной проблемой: "бизнес был преуспевающим и вдруг стал убыточным, как это могло произойти с нами?". Ответов множество, но за ними стоит главный обобщающий фактор: отсутствие должной аналитической прослойки между работниками и управляющими...
Двадцать пять заповедей SQL
Нельзя не учитывать важность эффективных SQL-операторов в основанных на использовании СУБД Oracle приложениях. Плохо написанный оператор может привести к хаосу в базе данных. Поскольку во многих организациях пользователи производят доступ к базам данных с использованием средств генерации отчетов и прямых запросов, эффективно написанный запрос на языке SQL позволяет не только улучшить производительность приложения, но и уменьшить сетевой трафик. Поэтому как пользователи, так и разработчики должны хорошо понимать работу оптимизатора запросов и возможности настройки, которая может сделать операторы более эффективными и менее рискованными...
Уроки ASP-технологии. Объекты доступа к данным
DSN (Data Source Name) в переводе с английского означает «имя источника данных». Оно предназначено для простейшего подключения к базе данных, то есть, если вы создали DSN, то вам не нужно указывать в коде все параметры подключения к базе данных (имя базы данных, режим подключения и др.) — они указываются при создании DSN...
Изучаем XML
Это очень краткое введение в XML. Вы встретитесь с Eddy - мета-котом, контролем синтаксиса XML и несколькими DTD. Не волнуйтесь, мы все поясним ;-) ...
"Мыльный" SOAP
Первоначальная спецификация SOAP версии 0.9, было опубликована в сентябре 1999 года, после чего, претерпев две редакции, вышла в свет в декабре 1999 года как версия 1.1. SOAP 1.1 фактически стал стандартом, он признан большинством поставщиков программного обеспечения и широко используется в реализациях клиент- сервер. Спецификация определяет ряд соглашений по обмену XML-сообщениями, в том числе правила по кодированию структур данных, алгоритм расширяемости, присоединение к HTTP-протоколу, требования к вызовам типа RPC (Remote Procedure Call, Удаленный вызов процедуры). Международный консорциум W3C (World Wide Web Consortium) намерен добиться того, чтобы SOAP был придан статус Рекомендации W3C - этим вопросов занимается Рабочая группа протокола XML (XML Protocol Working Group). В настоящий момент группа работает над SOAP 1.2, используя в качестве отправной точки SOAP 1.1; в спецификацию вносятся некоторые изменения и уточнения...
Использование веб сервисов для работы с удаленными SQL серверами
В данной статье рассматриваются проблемы, возникающие при работе с SQL серверами, находящимися в сети Интернет, а также пути их разрешения при помощи веб сервисов. В качестве примера приводится организация работы с MS SQL Server 2000 посредством использования веб службы WebDBConnector, разработанной автором этой статьи, скомпилированный код которой доступен на сайте www.megaprog.4u.ru...
Совершенствование методологии проектирования информационных систем
В настоящее время в области разработки и реализации интеллектуальных систем сложилось следующее положение: с одной стороны, квалификация коллективов разработчиков здесь, как правило, достаточно высока, с другой стороны, одна из сложнейших проблем, препятствующих широкому внедрению ИС, является недостаточное знание системными аналитиками и программистами предметных областей, в рамках которых готовятся проекты [1]. Создание и внедрение интеллектуальных систем общения с базами данных и особенно экспертных систем, и их широкое распространение выдвинуло проблему совершенствования методологии создания информационных систем на передний план...
Взаимодействие ADO Data Control и DataGrid ActiveX Control
Начнем с того, что я расскажу чем я занимаюсь, а занимаюсь я тем, что пишу бухгалтерские проги для малого частного бизнеса под заказ. Почему для малого, потому что не веду план счетов в проге, от этого прога становится легче и дешевле. Хотя мне разницы нет. И вот по роду работы я очень часто использую DataGrid, и всегда Access совские базы данных. Почему Access, да потому что легче всего её конструировать. А так как данных в таблицах очень много, и за разный период, то отображаю я это всё на экране при помощи DataGrid, и изучил я его очень хорошо...
Незапланированные запросы в Контур Корпорации Проблема незапланированных запросов к базе данных
Мощность любой базы данных больше, чем мощность пользовательских интерфейсов к ней. База данных потенциально предоставляет гораздо больше способов получения и отображения данных, чем это можно запрограммировать. В то же время, при эксплуатации информационной системы, пользователям всякий раз не хватает запросов, интерфейсов и отчетов...
Незапланированные запросы к Хранилищу данных на основе генерации View
Для извлечения и анализа данных можно воспользоваться одним из многочисленных средств организации запросов к хранилищам данных. Эти программы работают на клиентских машинах и предлагают удобный и понятный интерфейс работы с данными, хранящимися на сервере....

[Содержание]

ФОРУМ SQL.RU

Самые популярные темы недели

Рубли без копеек
Дайте веревку и мыло!
Как перевести формат TDateTime Delphi в формат DateTime MS SQL Server?
Вопрос по безопастности SQL
MSSQL & EXCEL
Нумерация в запросе 2
SQL Server и почта
Select from select
Какой тип данных выбрать
Пронумеровать список
Danniye o tekuschem polzovatele
SQL SERVER + документ Word
Условие Where - у меня уже крыша едет, помогите!
Не догоняю
Ошибка [DBNMPNTW] ConnectionOpen(CreateFile())
Полетел диск с transaction log...

[Содержание]

Вопросы остались без ответа

Пожалуйста помогите. Как снять пометку Suspect?
Из-за чего может быть снижение производительности
Вылетает 1C:Предприятие 7.7 для SQL
Помогите с математикой оптимизатора SQL запросов
Как отключить всех пользователей от БД (MSsqlServer7.0)
По поводу Meta Data.
Подсчет селектов
BULK INSERT
Работа с хранимыми процедурами в VC++
При инсталяции MSSQL2000 ругается компонента MDAC
Merge репликация и пропускная способность каналов связи.
2Admin! А что, поиск пока не работает ?
MS SQL 2000 Server - 2-e базы 1С (Висит)
не могу подключиться QA к серверу, вылетает по тайм-ауту
Только кластер
sp_detach_db
Индексатор конечно штука хорошая...(
Как перенести логины?
SQL Server + Visual C + ODBC + RFX&??
Принципы работы с транзакциями
Срочно нужна помощь!
Сертификат
Проблема с генерацией скриптов таблицы SQL Server 7.0
Sinhronizacia raboti SQL servera i MSExchange
LinkedServers
LinkedServer
OPENROWSET ORACLE

[Содержание]

ИНФОРМАЦИЯ АВТОРА РАССЫЛКИ

В настоящее время я рассматриваю варианты своего участия в новых проектах. Интерес представляют крупные системы баз данных, как развивающиеся, так и разрабатывающиеся "с нуля". Если Ваша организациия находиться в Москве или ближайшем подмосковье и нуждается в услугах MS SQL Server DBA, предлагаю рассмотреть моё резюме, которое всегда доступно по этой ссылке: http://www.sql.ru/subscribe/REZUME.shtml

[Содержание]

#101<<  #102

Вопросы, предложения, коментарии, замечания, критику и т.п. присылайте Александру Гладченко на адрес: mssqlhelp@pisem.net

sql.ru

Описание рассылки
 Поиск на SQL.RU
Искать: 
Результатов на странице: Формат:
Тип запроса: Раздел:
МИНИФОРМА
ПОДПИСКИ




http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное